在Bash控制台上运行文件test.sh
后,我有以下输出
{ "id" : "0cba-2dbc-11e4-8c2c-bb68" }
我想使用grep或egrep命令获取id
的值。这是我到目前为止所尝试的:
test.sh | grep -E "(: \".*\" })"
这只是打印出与上面相同的输出。接下来我尝试通过在我想要保存的值周围添加括号(.*)
进行分组:
test.sh | grep -E "(: \"(.*)\" })"
但我仍然以相同的结果结束。
有没有办法获得价值:0cba-2dbc-11e4-8c2c-bb68不使用python打印?
答案 0 :(得分:4)
您应该使用足够的工具来处理JSON数据,例如 jq
(轻量级和灵活的命令行JSON处理器)尝试使用{{1}解析JSON } / awk
/ grep
总是一个坏主意,因为他们不会理解" JSON格式。
sed
答案 1 :(得分:3)
您需要-o
选项,请尝试以下行:
grep -Po '"id"\s*:\s*"\K[^"]*'
这里的\K
就像一样。它支持不固定数量的字符。所以,把它翻译成英文:
仅(-o
)在"id" (any number of spaces):(any number of spaces)"
之后向我提供文字,直至下一个"
。这是你的id值。
-P
表示使用PCRE
答案 2 :(得分:1)
只需将输出传输到:
some-command | awk -F '[{}: ]+' '{gsub(/"/, "")} $2=="id"{print $3}'
0cba-2dbc-11e4-8c2c-bb68
答案 3 :(得分:1)
另一个awk
echo '{ "id" : "0cba-2dbc-11e4-8c2c-bb68" }' | awk -F\" '$2=="id" {print $4}'
0cba-2dbc-11e4-8c2c-bb68
答案 4 :(得分:0)
另一种方法。
echo '{ "id" : "0cba-2dbc-11e4-8c2c-bb68" }' | awk '{print $4}' | sed 's/["]//g'
返回
0cba-2dbc-11e4-8c2c-bb68