programing

jq - 다음을 포함하지 않는 json을 필터링하는 방법

topblog 2023. 3. 29. 21:09
반응형

jq - 다음을 포함하지 않는 json을 필터링하는 방법

필터링할 aws 쿼리가 있습니다.jq다 필터링하고 싶어요imageTags'마음'으로 끝나지 않는

지금까지 이렇게 했는데 '최신'이 포함된 것을 필터링하고 '최신'이 포함되지 않은 것(또는 '최신'으로 끝나지 않은 것)을 필터링합니다.

aws ecr describe-images --repository-name <repo> --output json | jq '.[]' | jq '.[]' | jq "select ((.imagePushedAt < 14893094695) and (.imageTags[] | contains(\"latest\")))"

감사해요.

사용할 수 있습니다.not논리를 뒤집다

(.imageTags[] | contains(\"latest\") | not)

또한, 파이프라인을 하나의 솔루션으로 단순화할 수 있습니다.jq불러.

네가 해야 할 일은| not의 범위 내에서jq

특히 mac의 경우 유용한 예brew사용자:

모든 병용 조제식 나열

JSON을 조회하여 출력을 해석함으로써

brew info --json=v1 --installed | jq -r 'map(
    select(.installed[].poured_from_bottle)|.name) | unique | .[]' | tr '\n' ' '

병에 담지 않은 모든 공식 나열

JSON을 쿼리하고 출력을 해석하여| not

brew info --json=v1 --installed | jq -r 'map(                                                                                                                          
  select(.installed[].poured_from_bottle | not) | .name) | unique | .[]'

이 경우contains()제대로 작동하지 않습니다.notindex()기능.

select(.imageTags | index("latest") | not)

이것..[] | .[]로 단축할 수 있다.[][]예.,

$ jq --null-input '[[1,2],[3,4]] | .[] | .[]'
1
2
3
4
$ jq --null-input '[[1,2],[3,4]] | .[][]'
1
2
3
4

문자열에 다른 문자열이 포함되어 있지 않은지 확인하려면 를 조합합니다.contains그리고.not예.,

$ jq --null-input '"foobar" | contains("foo") | not'
false
$ jq --null-input '"barbaz" | contains("foo") | not'
true

다음과 같은 방법으로 문자열 배열에 유사한 작업을 수행할 수 있습니다.any또는all예.,

$ jq --null-input '["foobar","barbaz"] | any(.[]; contains("foo"))'
true
$ jq --null-input '["foobar","barbaz"] | any(.[]; contains("qux"))'
false
$ jq --null-input '["foobar","barbaz"] | all(.[]; contains("ba"))'
true
$ jq --null-input '["foobar","barbaz"] | all(.[]; contains("qux"))'
false

파일이 있다고 합니다.json:

[ [["foo", "foo"],["foo", "bat"]]
, [["foo", "bar"],["foo", "bat"]]
, [["foo", "baz"],["foo", "bat"]]
]

또한 문자열이 없는 네스트된 어레이만 유지할 필요가 있습니다."ba":

$ jq --compact-output '.[][] | select(all(.[]; contains("bat") | not))' file.json
["foo","foo"]
["foo","bar"]
["foo","baz"]

언급URL : https://stackoverflow.com/questions/42746828/jq-how-to-filter-a-json-that-does-not-contain

반응형