Bash CLI remove quotes from output of a command
I am trying to load a JSON file using jq
per here. It is quite straightforward and this works:
$ cat ~/Downloads/json.txt | jq '.name'
"web"
However, I need to assign the output of this variable to a command. I tried to do this and this works:
$ my_json=`cat ~/Downloads/json.txt | jq '.name'`
$ myfile=~/Downloads/$my_json.txt
$ echo $myfile
/home/qut/Downloads/"web".txt
But I want /home/qut/Downloads/web.txt
.
How do I remove the quotes, i.e. change "web"
to web
?
Solution 1:
You can use the tr command to remove the quotes:
my_json=$(cat ~/Downloads/json.txt | jq '.name' | tr -d \")
Solution 2:
In the particular case of jq
, you can specify that the output should be in raw format:
--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.
To illustrate using the sample json.txt
file from your link:
$ jq '.name' json.txt
"Google"
whereas
$ jq -r '.name' json.txt
Google