用bash获取json的价值

时间:2017-04-19 14:01:48

标签: json regex bash escaping

我的json文件具有以下结构

{ "tool_first":"1.1.1","tool_second":"2.2.2","tool_three":"3.3.3" }

我想用bash grep从中检索版本。我创造了这样的东西

cat myjson.json | grep -Po '"tool_second":\K"[A-Za-z0-9/._]*"'

给我输出

"2.2.2"

如何使用变量而不是字符串" tool_second"?我想要像

这样的东西
cat myjson.json | grep -Po '"$x":\K"[A-Za-z0-9/._]*"'

其中$ x是变量; x =" tool_second"。我无法通过变量从中检索信息。如何以这种方式正确转义变量?我只需要版本号,没有""。

1 个答案:

答案 0 :(得分:2)

  

grep NOT 是解析JSON文字的正确工具。使用更像语法的工具,例如jq。使用下面的答案只是为了琐碎的目的。

您没有在字符串中转义双引号,以便在变量x中搜索,

x="\"tool_second\""
grep -Po "$x:\K\"[A-Za-z0-9/._]*\"" file
"2.2.2"

它也适用于其他字符串!

x="\"tool_first\""
grep -Po "$x:\K\"[A-Za-z0-9/._]*\"" file
"1.1.1"