我想从下面的 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" } ] }
答案1
在尝试解析 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"
}
上面的工作原理是从数组中取出元素.Topics[]
,然后选择.Name
其值包含的元素topic-tenki-deploy
。