아래 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