jsonfile
JSON 입력( ) 을 구문 분석하는 스크립트를 작성 중입니다 .
{
"key11":1010,"key11_yes":13,"key11_no":14,
"key12":12120,"key12_yes":9,"key12_no":25,
"key13":12103,"key13_yes":13,"key13_no":20
}
jq tools
다음과 같이 값을 사용하고 확인하고 싶습니다 .key11
key12
key13
cat jsonfile | jq 'key[1-9][1-9]'
이 패턴이 -style 정규식처럼 작동하길 원합니다 grep
.
cat jsonfile | grep 'key[1-9][1-9]'
일치하는 키의 값이 null이면 내 스크립트는 exit 0
.
key[1-9]_[this part is null]
또한 if (즉, _yes
or 를 추가하지 않고 _no
) then 의 두 번째 매개변수를 확인해야 합니다 exit 0
.
답변1
jq
다음에 대한 정규식 필터 ( test
, match
, capture
)는 원시 텍스트를 입력으로 사용합니다. 키 이름에 정규식을 적용하려면 먼저 해당 키 이름을 텍스트로 변환해야 합니다.
jq
기능을 제공하다to_entries
그 이유는 다음과 같습니다.
cat jsonfile | jq 'to_entries'
산출:
[ { "키": "키11", "값": 1010 }, { "키": "key11_yes", "값": 13 }, { "키": "key11_no", "값": 14 }, { "키": "키12", "값": 12120 }, ... ]
그런 다음 키를 추출하고 정규식에 대해 테스트한 다음 전체 항목을 출력하거나 무시하는 필터에 입력할 수 있습니다.
if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end
일치 from_entries
함수는 나머지 항목을 원래 형식으로 다시 변환하거나 with_entries
이 모든 작업을 한 단계로 수행할 수 있습니다.
cat jsonfile|jq 'with_entries(if (.key|test("key[0-9][0-9]$")) then ( {key: .key, value: .value } ) else empty end )'
결과는 키가 패턴과 일치하는 입력의 모든 쌍입니다.
{
"key11": 1010,
"key12": 12120,
"key13": 12103
}