Bash 打印文件中匹配图案的所有实例

Bash 打印文件中匹配图案的所有实例,bash,awk,sed,grep,Bash,Awk,Sed,Grep,我一直在尝试打印文件中匹配模式的所有实例 输入文件: {"id":"prod123","a":1.3,"c":"xyz","q":2}, {"id":"prod456","a":1.3,"c":"xyz","q":1}]} {"id":"prod789","a":1.3,"currency":"xyz","q":2}, {"id":"prod101112","a":1.3,"c":"xyz","q":1}]} prod123 prod456 prod789 prod101112 我想打印

我一直在尝试打印文件中匹配模式的所有实例

输入文件:

{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2}, 
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}
prod123
prod456
prod789
prod101112
我想打印
“id”:“
”,
之间的所有内容

预期输出:

{"id":"prod123","a":1.3,"c":"xyz","q":2}, 
{"id":"prod456","a":1.3,"c":"xyz","q":1}]}
{"id":"prod789","a":1.3,"currency":"xyz","q":2}, 
{"id":"prod101112","a":1.3,"c":"xyz","q":1}]}
prod123
prod456
prod789
prod101112
我正在使用命令

grep -Eo 'id\"\:\"[^"]+"\"\,*' | grep -Eo '^[^"]+'

我在这里遗漏了什么吗?

出错的是逗号在第一个
grep
中的位置:

grep -Eo 'id.\:.[^"]+"\,"' inputfile
为了得到所需的子字符串,您需要做一些额外的工作

grep -Eo 'id.\:.[^"]+"\,"' inputfile | cut -d: -f2 | grep -Eo '[^",]+'
我使用了
cut
,这对于您的示例输入来说很容易

cut -d'"' -f4 < inputfile
或者使用awk(解决方案现在类似于
cut
,但可以轻松更改)


您是否安装了
jq
?您的输出似乎是一个
grep
或JSON文件上的任何内容。您可能对在完整文件中使用
jq
感兴趣。但是对于这一点,我们应该看看这个东西是什么样子的。使用一些JSON解析器,无论是
jq
还是您选择的语言中的模块。不要使用诸如
grep
awk
之类的面向行的工具来尝试解析JSON。非常感谢,这很有帮助,我得到了想要的结果。