以下の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
awk
一般的なLinux / Unix CLIツール(たとえばsed
、&)を使用することは、JSONを解析するときに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