我在下面给出了一个字符串。我只需要获取第一个accountHeader(粗体)JSON字符串即可。
<START AdditionalInfo#:>[FormsGenerationServiceImpl::, accountNumber:ABC07667 , [Source System Request : {"Info":{"Holder": {"nameData": {"shortName": "McIntosh"}},**"accountHeader": {"a": "Y","b": "1","c": "4","draft": "P","e": "Y0000DU9","f": "T","g": "1"}**,"forms": {"maskSSN": "N","deliverForms": "G","selectedForms": {"T5": ["F10"],"T1": ["F1403"],"T2": ["F100001401"]}},"accountHeader": {"a": "Y","b": "1","c": "4","d": "HWA","draftRequestType": "P","e": "Y0000DU9","f": "T","g": "1"}}} ], null]<AdditionalInfo#: END>
我的输出应该是
"accountHeader": {"a": "Y","b": "1","c": "4","draft": "P","e": "Y0000DU9","f": "T","g": "1"}
以下是一些选择:
grep
与该-o
标志一起使用,仅打印该行的匹配部分,并使用head
进行过滤,以仅获得第一个匹配项:
grep -o '"accountHeader[^}]*}' file.json | head -n1
正则表达式会寻找一个"accountHeader
尽可能多的非}
字符,直到第一个}
。它基本上也与以下其他解决方案中使用的正则表达式相同。
使用sed
with-n
禁止打印,并且p
在替换后仅当替换成功时才打印。然后,替换(删除)除所需内容以外的所有内容:
sed -n 's/.*\("accountHeader[^}]*}\).*/\1/p' file.json
使用Perl,它-l
会在每个print
调用中添加一个换行符,-n
表示“处理输入文件的每一行”并应用以下脚本-e
:
perl -lne '/.*("accountHeader[^}]*})/ && print $1' file.json
使用awk
,这是假设**
您的示例输入中的突出显示了您感兴趣的部分,而实际数据中实际上并不存在该部分。如果是这样,这应该起作用:
awk -F'},' '{print $2"}"}' file.json
如果**
确实存在,那么事情就更简单了,只需将它们用作字段定界符即可:
awk -F'**' '{print $2"}"}' file.json
或者
perl -F"\*\*" -alne 'print $F[1]' file.json
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句