Bash CLI supprime les guillemets de la sortie d'une commande


12

J'essaie de charger un fichier JSON en utilisant jqpar ici . C'est assez simple et cela fonctionne:

$ cat ~/Downloads/json.txt | jq '.name'
"web"

Cependant, je dois affecter la sortie de cette variable à une commande. J'ai essayé de faire ça et ça marche:

$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt

Mais je veux /home/qut/Downloads/web.txt.

Comment supprimer les guillemets, c'est- "web"à- dire passer à web?

Réponses:


27

Vous pouvez utiliser la commande tr pour supprimer les guillemets:

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")

2
Merci pour la trcommande ... J'ai parcouru 4 messages différents avec des centaines de votes positifs avec des personnes écrivant plus de 40 méga-lignes pour faire le travail. Vous avez la bonne solution (et probablement moderne).
— Shadoninja

15

Dans le cas particulier de jq, vous pouvez spécifier que la sortie doit être au format brut :

   --raw-output / -r:

   With this option, if the filter´s result is a string then  it  will
   be  written directly to standard output rather than being formatted
   as a JSON string with quotes. This can be useful for making jq fil‐
   ters talk to non-JSON-based systems.

Pour illustrer l'utilisation de l'exemple de json.txtfichier à partir de votre lien :

$ jq '.name' json.txt
"Google"

tandis que

$ jq -r '.name' json.txt
Google

1

Vous pouvez utiliser eval echocomme ceci:

my_json=$(eval echo $(cat ~/Downloads/json.txt | jq '.name'))

mais ce n'est pas idéal - pourrait facilement provoquer des bugs et / ou des failles de sécurité.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.