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.