![Bash를 사용하여 Json 파일에서 단일 값을 가져오는 정규식](https://linux55.com/image/137842/Bash%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20Json%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%8B%A8%EC%9D%BC%20%EA%B0%92%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%98%A4%EB%8A%94%20%EC%A0%95%EA%B7%9C%EC%8B%9D.png)
아래 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