बैश 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कमांड के लिए धन्यवाद ... मैंने काम करने के लिए 40+ चरित्र मेगा-वन-लाइनर्स लिखने वाले लोगों के साथ सैकड़ों विभिन्न पदों के साथ 4 अलग-अलग पोस्टों के माध्यम से देखा। आपके पास सही (और शायद आधुनिक) समाधान है।
शादिनिजा

15

के विशेष मामले में jq, आप यह निर्दिष्ट कर सकते हैं कि आउटपुट कच्चे प्रारूप में होना चाहिए :

   --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'))

लेकिन यह आदर्श नहीं है - आसानी से कीड़े और / या सुरक्षा दोष पैदा कर सकता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.