我有这个JSON字符串:
{"name":"http://someUrl/ws/someId","id":"someId"}
我只想获得“id”键的值并将其存储在某个变量中。我成功地尝试使用jq。但是由于一些限制,我需要通过使用grep和字符串匹配来实现这一点。
我到目前为止尝试了这个:grep -Po '"id":.*?[^\\]"';
但是这会给"id":"ws-4c906698-03a2-49c3-8b3e-dea829c7fdbe"
作为输出。我只需要id值。请帮忙
答案 0 :(得分:1)
使用PCRE正则表达式,您可以使用外观。因此,您需要将"id":"
放入positive lookbehind construct,然后匹配除"
以外的1个或多个字符:
grep -Po '(?<="id":")[^"]+'
,其中
(?<="id":")
- 要求"id":"
立即显示在当前位置的左侧(但匹配的文字未添加到匹配值中)和[^"]+
- 匹配并向匹配项添加除"
以外的一个或多个字符。获取带有转义引号的值:
grep -Po '(?<="id":")[^"\\]*(?:\\.[^"\\]*)*'
此处(?<="id":")
仍然会匹配"id":"
之后的位置,然后匹配以下内容:
[^"\\]*
- 除"
和\
以外的零个或多个字符(?:\\.[^"\\]*)*
- 零个或多个后续序列:
\\.
- \
和任何字符(任何转义序列)[^"\\]*
- 除"
和\
以外的零个或多个字符答案 1 :(得分:0)
参见Jshon
,它是用于shell脚本使用的命令行Json解析器。
echo '{"name":"http://someUrl/ws/someId","id":"someId"}' | jshon -e id
"someId"
刚刚注意到我读过您说需要使用标准工具的部分,如果您的管理员不允许使用Jshon,系统很可能会有Python
可用,您可以使用。< / p>
echo '{"name":"http://someUrl/ws/someId","id":"someId"}' | python -c 'import sys, json; print json.load(sys.stdin)["id"]'
someId
使用grep只是为了解决问题,我会避免它,并选择适当的Json解析器,如上所述。