[Azure] 使用 JMESPath 在 Azure CLI 的輸出中,過濾出符合多重條件的結果

[Azure] 使用 JMESPath 在 Azure CLI 的輸出中,過濾出符合多重條件的結果

今天想從 Azure Key Vault 裡面,取出所有的 secret 的名稱,

於是執行了下面的 CLI:

$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[].name" -o yaml

- Jerry
- enc-Jerry
- Jerry-env-data
- Andy
- Fred
- Fred-env-data
- enc-Fred

 

這上面的查詢裡面, [].name 是所謂的 JMESPath

讓我們可以選擇 Json 陣列裡每個元素的 name。

只是我原本預期它輸出的只有 Jerry, Andy, Fred 這些名稱,

因為其他的都是我們把這些人的資料也存在 Key Vault 裡面使用的,

要怎麼過濾掉那些包含 enc- 或 env- 的名稱呢?

 

試了一下,可以用下面的方式來完成:

$ az keyvault secret list --subscription "${SUBSCRIPTION}" --vault-name ${KEYVAULT} --query "[?!contains(name, 'enc-')]|[?!contains(name, 'env-')].name" -o yaml

- Jerry
- Andy
- Fred

 

上面使用了  | 將符合條件的資料再往後傳,

第一個條件先過濾出 name 中不包含 enc- 這個字的,

第二個條件再過濾出 name 中不包含 env- 這個字的,

因此最後剩下的就是我們要的部分囉~

 

參考資料:shell – How to handle JMESPath contains filter on attribute that may be null?

(本頁面已被瀏覽過 77 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料