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コマンドをありがとう...私は仕事を成し遂げるために40人以上のキャラクターのメガワンライナーを書いている人々との何百もの賛成投票で4つの異なる投稿を調べました。あなたは正しい(そしておそらく現代的な)解決策を持っています。
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.