当前位置: 首页 > 知识库问答 >
问题:

Kubectl query for regex in JsonPath

朱阳晖
2023-03-14

我正在尝试使用JsonPath中的正则表达式输出.metadata.name 的值,后跟.spec.template.spec.containers[].students[]数组中学生的姓名进行Kubectl查询。

我实际上在jq中为此提出了一个类似的问题。

如果没有指定键,如何在jq中给定条件下打印数组的特定值

该解决方案有效,但我想知道是否有使用JsonPath或go-template的替代解决方案(无需使用jq)。

例如,如果我检查学生[]数组是否包含单词“Jeff”,我希望输出显示如下:

学生部署:杰斐逊

我试过的:

对于JsonPath,我尝试了以下查询:

kubectl get deployment -o=jsonpath="{range .items[?(@.spec.template.spec.containers[*].students[*])]}{'\n'}{.metadata.name}{':\t'}{range .spec.template.spec.containers[*]}{.students[?(@=="Jefferson")]}{end}{end}"

但这只适用于评估匹配的单词。是否可以使用JsonPath查询正则表达式,因为我在这里读到JsonPath正则表达式=~不起作用?我确实尝试使用|grep和findstr,但它仍然将数组中的所有值返回给我。除了jq,还有其他方法可以检索正则表达式输出吗?

https://github.com/kubernetes/kubernetes/issues/61406

下面的部署模板是 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"
                                ]
                            }
                        ]
                    }
                }
            }
        }
    ]
}

共有1个答案

周龙光
2023-03-14

JSONPath支持的文档清楚地描述了JSONPath不可能实现这一点,您可以使用jq。

https://kubernetes.io/docs/reference/kubectl/jsonpath/

 类似资料:

相关问答

相关文章

相关阅读