我尝试使用AWS ECR image list和正则表达式过滤返回为JSON的jq。
按照预期执行命令并返回已过滤的列表:
aws ecr list-images --registry-id 123456789012 --repository-name repo | jq '.imageIds | map(select(.imageTag)) | map(select(.imageTag | test("[a-z0-9]-[0-9]")))'
[
{
"imageTag": "bbe3d9-2",
"imageDigest": "sha256:4c0e92098010fd26e07962eb6e9c7d23315bd8f53885a0651d06c2e2e051317d"
},
{
"imageTag": "3c840a-1",
"imageDigest": "sha256:9d05e04ccd18f2795121118bf0407b0636b9567c022908550c54e3c77534f8c1"
},
{
"imageTag": "1c0d05-141",
"imageDigest": "sha256:a62faabb9199bfc449f0e0a6d3cdc9be57b688a0890f43684d6d89abcf909ada"
}
]
但是当我尝试将正则表达式作为参数传递给jq时,它返回一个空数组。
aws ecr list-images --registry-id 123456789012 --repository-name repo | jq --arg reg_exp "[a-z0-9]-[0-9]" '.imageIds | map(select(.imageTag)) | map(select(.imageTag | test("$reg_exp")))'
[]
我尝试了多种方法来传递该变量,但却无法使其发挥作用。其他相关信息可能是我在mac上使用zsh而我的jq版本是jq-1.5。任何帮助表示赞赏。
答案 0 :(得分:1)
$reg_exp
是一个引用你的正则表达式的变量,"$reg_exp"
只是一个文字字符串。删除引号。 (并且额外的地图/选择是多余的)
jq --arg reg_exp "[a-z0-9]-[0-9]" '.imageIds | map(select(.imageTag | test($reg_exp)))'