正则表达式使用 bash 从 Json 文件获取单个值

正则表达式使用 bash 从 Json 文件获取单个值

我想从下面的 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 工具(例如awksed、 & )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

参考

相关内容