Bash CLI menghapus tanda kutip dari keluaran suatu perintah


12

Saya mencoba memuat file JSON menggunakan jqper di sini . Cukup mudah dan ini berfungsi:

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

Namun, saya perlu menetapkan output dari variabel ini ke sebuah perintah. Saya mencoba melakukan ini dan ini berhasil:

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

Tapi saya mau /home/qut/Downloads/web.txt.

Bagaimana cara menghapus tanda kutip, yaitu mengubah "web"ke web?

Jawaban:


27

Anda dapat menggunakan perintah tr untuk menghapus tanda kutip:

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

2
Terima kasih untuk trperintahnya ... Saya melihat melalui 4 posting berbeda dengan ratusan upvotes dengan orang-orang menulis 40+ karakter mega-one-liners untuk menyelesaikan pekerjaan. Anda memiliki solusi yang benar (dan mungkin modern).
Shadoninja

15

Dalam kasus tertentu jq, Anda dapat menentukan bahwa output harus dalam format mentah :

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

Untuk mengilustrasikan menggunakan json.txtfile sampel dari tautan Anda :

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

sedangkan

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

1

Anda bisa menggunakan eval echoseperti ini:

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

tetapi ini tidak ideal - dapat dengan mudah menyebabkan bug dan / atau kelemahan keamanan.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.