[英]Grep multiple line between curly braces using shell command
我想 grep 文件中花括号之间的多行。 文件 originalfile.txt 的示例可能是:
{
"User ID": "admin",
"Tower Job ID": "",
"Date": "Fri Jan 15 12:50:13 UTC 2021",
"Playbook Input": [
{"Host FQDN": "abc.cloud"},
{"Host IP Address": "10.10.10.1"},
{"Host Serial Number": "ABCD"},
{"RITM Ticket": "sk_123"}
],
"Playbook Output": {
"Results" : [
{ "Update server" : "Pass" , "Result" : "done" },
{ "Decom server" : "Pass" , "Result" : "done" },
{ "Check process" : "Pass" , "Result" : "done" },
{ "Schedule" : "Pass" , "Result" : "Scheduled @ 2021-01-15 04:53:55" },
{ "Playbook summary" : "Pass" , "Result" : "Complete" }
]
}
}
我想 grep 仅在Playbook Output
之后的行中:
{
"Results" : [
{ "Update server" : "Pass" , "Result" : "done" },
{ "Decom server" : "Pass" , "Result" : "done" },
{ "Check process" : "Pass" , "Result" : "done" },
{ "Schedule" : "Pass" , "Result" : "Scheduled @ 2021-01-15 04:53:55" },
{ "Playbook summary" : "Pass" , "Result" : "Complete" }
]
}
有没有办法 grep 文件中大括号之间的特定内容.s
您的输入结构为 JSON 因此您可以使用 jq shell 工具对其进行过滤
$ jq '."Playbook Output"' foo.json
{
"Results": [
{
"Update server": "Pass",
"Result": "done"
},
{
"Decom server": "Pass",
"Result": "done"
},
{
"Check process": "Pass",
"Result": "done"
},
{
"Schedule": "Pass",
"Result": "Scheduled @ 2021-01-15 04:53:55"
},
{
"Playbook summary": "Pass",
"Result": "Complete"
}
]
}
sed -n -e '/Results/,$p' yourfile.dat
如果要保留顶部的支架:
sed -n -e '/Results/,$p' yourfile.dat | sed -e '1 i {'
Output:
{
"Results" : [
{ "Update server" : "Pass" , "Result" : "done" },
{ "Decom server" : "Pass" , "Result" : "done" },
{ "Check process" : "Pass" , "Result" : "done" },
{ "Schedule" : "Pass" , "Result" : "Scheduled @ 2021-01-15 04:53:55" },
{ "Playbook summary" : "Pass" , "Result" : "Complete" }
]
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.