Bash CLI ลบเครื่องหมายคำพูดออกจากผลลัพธ์ของคำสั่ง


12

ฉันพยายามที่จะโหลดไฟล์ JSON โดยใช้jqต่อที่นี่ มันค่อนข้างตรงไปตรงมาและงานนี้:

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

อย่างไรก็ตามฉันต้องกำหนดผลลัพธ์ของตัวแปรนี้ให้กับคำสั่ง ฉันพยายามทำสิ่งนี้และงานนี้:

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

/home/qut/Downloads/web.txtแต่ฉันต้องการ

ฉันจะลบคำพูดได้อย่างไรเช่นเปลี่ยน"web"เป็นweb?

คำตอบ:


27

คุณสามารถใช้คำสั่งtrเพื่อลบเครื่องหมายคำพูด:

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

2
ขอบคุณสำหรับtrคำสั่ง ... ฉันได้ดูโพสต์ 4 โพสต์ที่แตกต่างกันพร้อมกับ upvotes หลายร้อยคนที่เขียนตัวละครมากกว่า 40 ล้านตัวเพื่อให้งานเสร็จสมบูรณ์ คุณมีทางออกที่ถูกต้อง (และอาจทันสมัย)
Shadoninja

15

ในกรณีเฉพาะของjqคุณสามารถระบุว่าผลลัพธ์ควรอยู่ในรูปแบบraw :

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

หากต้องการแสดงให้เห็นถึงการใช้json.txtไฟล์ตัวอย่างจากลิงค์ของคุณ :

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

แต่ทว่า

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

1

คุณสามารถใช้eval echoสิ่งนี้:

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

แต่นี่ไม่เหมาะ - อาจทำให้เกิดข้อบกพร่องและ / หรือข้อบกพร่องด้านความปลอดภัยได้อย่างง่ายดาย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.