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。非常感谢,这很有帮助,我得到了想要的结果。