我的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"。我无法通过变量从中检索信息。如何以这种方式正确转义变量?我只需要版本号,没有""。
答案 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"