Bash-CLI entfernt Anführungszeichen aus der Ausgabe eines Befehls

12

Ich versuche , eine JSON - Datei zu laden jqpro hier . Es ist ganz einfach und das funktioniert:

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

Ich muss jedoch die Ausgabe dieser Variablen einem Befehl zuweisen. Ich habe versucht, dies zu tun und das funktioniert:

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

Aber ich will /home/qut/Downloads/web.txt.

Wie entferne ich die Anführungszeichen, dh ändere "web"auf web?

edesz
quelle

Antworten:

27

Mit dem Befehl tr können Sie die Anführungszeichen entfernen:

my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Florian Diesch
quelle
2
Vielen Dank für den trBefehl ... Ich habe 4 verschiedene Posts mit Hunderten von Upvotes durchgesehen, in denen Leute mehr als 40 Mega-One-Liner geschrieben haben, um die Arbeit zu erledigen. Sie haben die richtige (und wahrscheinlich moderne) Lösung.
Shadoninja
14

Im speziellen Fall von jqkönnen Sie festlegen , dass die Ausgabe in sein sollte roh Format:

   --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.

So veranschaulichen Sie die Verwendung der Beispieldatei json.txtaus Ihrem Link :

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

wohingegen

$ jq -r '.name' json.txt
Google
Steeldriver
quelle
1

Sie könnten so verwenden eval echo:

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

Dies ist jedoch nicht ideal - kann leicht zu Fehlern und / oder Sicherheitslücken führen.

wjandrea
quelle