2016-07-15 75 views
1

我試圖過濾AWS ECR image list作爲JSON與jq和正則表達式返回。通過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。任何幫助表示讚賞。

回答

1

$reg_exp是一個指向你的正則表達式的變量,"$reg_exp"只是一個文字字符串。刪除引號。 (並且額外的地圖/選擇是多餘的)

jq --arg reg_exp "[a-z0-9]-[0-9]" '.imageIds | map(select(.imageTag | test($reg_exp)))' 
+0

謝謝!就是這樣。我在發佈這個問題之前試過,但顯然我錯過了一些東西,並得到解析錯誤。 –