Bash CLI从命令输出中删除引号


12

我正在尝试使用jqper here加载JSON文件。这非常简单,并且有效:

$ 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

Answers:


27

您可以使用tr命令删除引号:

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

2
谢谢您的tr命令...我浏览了4个不同的职位,并进行了数百次投票,并撰写了40多个字符的巨型一线客来完成工作。您有正确的(可能是现代的)解决方案。
Shadoninja

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

但这并不理想-可能会轻易导致错误和/或安全漏洞。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.