我正在尝试使用带有正则表达式的文件扩展名“ .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
答案 0 :(得分:1)
首先,在设置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$"))'