【发布时间】:2021-09-20 20:20:57
【问题描述】:
我正在尝试使用 jq 中的正则表达式 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.containers[].students[]?|test("\"^Jeff.\"")) | .metadata.name, "\":\t\"", .spec.template.spec.containers[].students'
如果没有指定键,有没有办法在 jq 中打印给定条件的数组的特定值?另外,如果有多个部署,该解决方案是否有效?
下面的部署模板是 json 格式的,我将其缩短为仅相关部分。
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"name": "student-deployment",
"namespace": "default"
},
"spec": {
"template": {
"spec": {
"containers": [
{
"students": [
"Alice",
"Bob",
"Peter",
"Sally",
"Jefferson"
]
}
]
}
}
}
}
]
}
【问题讨论】:
标签: json kubernetes select jq