itg*_*eek 3 linux grep json aws
我想从下面的 JSON 文件内容中检索值“tenki-deploy-topic”。我使用了这个正则表达式grep -o 'topic[^"]*' output.log,然后它获取了所有主题的文件,相反,我想使用其他一些键,例如“tenki”或“dense”。
{ "Topics": [ { "Name": "arn:aws:sns:us-west-2:123456789012:topic-freezing-deploy" }, { "Name": "arn:aws:sns:us-west-2:123456789012:topic-dense-deploy" }, { "Name": "arn:aws:sns:us-west-2:123456789012:topic-tenki-deploy" } ] }
Run Code Online (Sandbox Code Playgroud)
在尝试解析 JSON 时,使用 Linux/Unix 的典型 CLI 工具(例如awk、sed、 & )grep几乎总是错误的方法。
我在终端使用 JSON CLI 的典型 goto 工具是jq. 它在所有存储库中,并且可以轻松安装。
您如何只选择Topics数组中的元素的问题变得微不足道:
$ jq '.Topics[] | select(.Name | contains("topic-tenki-deploy"))' output.log
{
"Name": "arn:aws:sns:us-west-2:123456789012:topic-tenki-deploy"
}
Run Code Online (Sandbox Code Playgroud)
上面的方法是从.Topics[]数组中取出元素,然后选择.Name其值包含topic-tenki-deploy.