Значение парсинга jq с расширением .tgz - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь получить значения с расширением файла " .tgz " с регулярным выражением.Но получаю ошибку JQ.

json_var=[ { "Key": "raw/bene/test/nd_OneP4.tgz" }, { "Key": "raw/bene/test/nd_OneP4.tgz" } ]

echo $json_var | jq -r ' .[] | to_entries | map(select(.key | test("*.tgz")).value)'

Ошибка JQ:

jq: error (at <stdin>:1): number (0) cannot be matched, as it is not a string

1 Ответ

0 голосов
/ 27 ноября 2018

Во-первых, при установке json_var вам нужно заключить в кавычки строку:

json_var='[ { "Key": "raw/bene/test/nd_OneP4.tgz" }, { "Key": "raw/bene/test/nd_OneP4.tgz" } ]'

Во-вторых, нет необходимости использовать to_entries: строка, которую вы хотите проверить, доступна через .Key:

echo $json_var |
  jq -r ' .[] | select(.Key | test("\\.tgz$")).Key'

Обратите внимание, что аргумент test должен быть представлением регулярного выражения в формате JSON.

В-третьих, в вашем конкретном случае, по крайней мере, вышеприведенное можно упростить до:

echo $json_var | 
  jq -r ' .[][] | select( test("\\.tgz$"))'
...