Bash CLI xóa dấu ngoặc kép từ đầu ra của lệnh


12

Tôi đang cố gắng tải một tệp JSON bằng cách sử dụng jqmỗi ở đây . Nó khá đơn giản và điều này hoạt động:

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

Tuy nhiên, tôi cần gán đầu ra của biến này cho một lệnh. Tôi đã cố gắng để làm điều này và điều này hoạt động:

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

Nhưng tôi muốn /home/qut/Downloads/web.txt.

Làm cách nào để xóa dấu ngoặc kép, tức là thay đổi "web"thành web?

Câu trả lời:


27

Bạn có thể sử dụng lệnh tr để xóa dấu ngoặc kép:

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

2
Cảm ơn bạn đã ra trlệnh ... Tôi đã xem qua 4 bài viết khác nhau với hàng trăm lượt upvote với những người viết hơn 40 ký tự mega-one-liners để hoàn thành công việc. Bạn có giải pháp chính xác (và có lẽ là hiện đại).
Shadoninja

15

Trong trường hợp cụ thể jq, bạn có thể chỉ định rằng đầu ra phải ở định dạng thô :

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

Để minh họa bằng cách sử dụng json.txttệp mẫu từ liên kết của bạn :

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

trong khi

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

1

Bạn có thể sử dụng eval echonhư thế này:

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

nhưng điều này không lý tưởng - có thể dễ dàng gây ra lỗi và / hoặc lỗi bảo mật.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.