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

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[]선택하는 방식으로 작동합니다 ..Nametopic-tenki-deploy

인용하다

관련 정보