我試圖使用jq中的regex test()函式,在.spec.template.spec.containers[].students[]陣列中輸出.metadata.name后的學生姓名的值。
我在檢索單個陣列的值時遇到了困難,因為沒有為 students[] 陣列指定鍵。
例如,如果我檢查students[]陣列中是否包含 "Jeff "這個詞,我希望輸出顯示如下:
student-deployment: Jefferson
我已經嘗試了什么:
我已經嘗試了下面的命令,它有點作用,但我不確定如何只獲得 "Jefferson "的值。下面的命令會列印出所有的students[]陣列值,這不是我想要的。我正在使用Powershell來運行下面的命令。
kubectl get deployments -o json | jq -r ' 。 items[] | select(.spec.template.spec.contains[].students[]?|test(""^Jeff.")) | .metadata.name, "": "", .spec.template.spec.contains[].students'。
在jq中,如果沒有指定鍵,是否有辦法在給定的條件下列印一個陣列的特定值?此外,如果有多個部署,該解決方案是否有效?
下面的部署模板是json格式的,我把它縮短到只有相關部分。
{
"apiVersion": "v1"/span>。
"專案": [
{
"apiVersion": "app/v1"。
"種類": "部署"。
"metadata": {
"name": "student-deployment"。
"namespace": "default", "default"。
},
"規格": {
"模板": {
"spec": {
"容器": [
{
"學生": [
"Alice"。
"Bob"。
"Peter"。
"Sally"。
"Jefferson"。
]
}
]
}
}
}
}
]
}
uj5u.com熱心網友回復:
。對于這個方法,我們引入一個變數$pattern。你可以用--arg pattern來設定你的regex,例如:"Jeff"或"^Al"或"e$"來使學生串列被test過濾,或者留空來查看所有學生。
現在,我們遍歷所有.item[]元素(即遍歷 "所有部署")。對于每一個發現的元素,我們輸出.metadata.name的內容,后面是一個字面冒號和一個空格。然后我們再次遍歷所有.spec.template.spec.containers[].students[],執行模式test并將結果連接起來。
為了列印出原始字串而不是JSON,我們在呼叫jq時使用-r選項。
kubectl get deployments o json
| jq --arg pattern "Jeff" -r '
.專案[]
| .metadata.name ": " (
.spec.template.spec.contains[].students[]。
| select(test($pattern))
)
'
uj5u.com熱心網友回復:
為了檢索輸入中的 "學生 "陣列,你可以使用這個過濾器:
.items[]/span>
| paths(objects) as $p
| getpath($p)
| select( objects | has("students") )
| .students
然后,你可以添加額外的過濾器來選擇感興趣的特定學生,例如:
你可以添加額外的過濾器來選擇感興趣的特定學生。
| . []
| select(test("Jeff"))
然后添加任何后處理過濾器,例如
| "student-deployment: (.)"
當然,你可以通過許多其他方式獲得students陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322780.html
標籤:
