jsonpath不支持正则表达式。这是关于这件事的github问题。您可以使用
我试图使用JSONPATH查询来检索pod,该查询将名称与下面指定的特定模式匹配,我得到了如图所示的错误。任何失败的原因。
kubectl get po -n sdfd -o jsonpath='{.items[?(@.metadata.generateName =~ /abc.*?/i)].status.podIP}'
error: error parsing jsonpath {.items[?(@.metadata.generateName =~ /abc.*?/i)].status.podIP}, unrecognized character in action: U+007E '~'
请找到如下所示的kubectl cli版本:-
kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T21:54:15Z", GoVersion:"go1.15", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.9", GitCommit:"454b5b515582f8ac8419435dc9c230fc97fb844b", GitTreeState:"clean", BuildDate:"2021-11-01T19:59:05Z", GoVersion:"go1.15.14", Compiler:"gc", Platform:"linux/amd64"}
根据文档:
不支持JSONPath正则表达式。如果要使用正则表达式进行匹配,可以使用jq之类的工具。
运行以下命令以获得所需结果:
kubectl get pods -o json | jq -r '.items[] | select(.metadata.name | test("test-")).spec.containers[].image'
有关更多信息,请参阅此Github问题和stackpost。
jq
来使用regex处理输出。