从格式化为带空格的表的字符串中,如何 grep 所有列都相等的所有值?

kiv*_*ant 2 grep

问题来自issue: https://github.com/kubernetes/kubectl/issues/717

Kubectl 在如下表中返回信息:

$ kubectl get replicasets -n kube-system

NAMESPACE     NAME                       DESIRED   CURRENT   READY   AGE
kube-system   datadog-657c65b75c         2         2         2       11d
kube-system   kube-ops-view-5d8df57fc    1         1         0       33d
Run Code Online (Sandbox Code Playgroud)

要在不使用 json 格式化程序的情况下查找输出中的所有偏差,我可以执行以下命令:

grep -v '0         0         0\|1         1         1\|2         2         2\|3         3         3\|4         4         4\|5         5         5'
Run Code Online (Sandbox Code Playgroud)

什么 grep 命令可以涵盖所有可能的情况?目标是找到任何 DESIRED != CURRENT、CURRENT != READY 或 DESIRED != READY 的 ReplicaSet。

HBr*_*ijn 5

grep当您的模式既不是固定字符串也不是正则表达式时,这不是很好。

当您希望所有副本集的“所需”、“当前”和“就绪”数字不相同时,请使用更好的模式匹配语言,例如awk

   kubectl get replicasets -n kube-system | awk '$3!=$4 || $4!=$5 {print $0}'
Run Code Online (Sandbox Code Playgroud)

它应该返回标头和任何不一致的副本集。

您可以使用以下方法省略标头:

    awk 'NR!=1 && ($3!=$4 || $4!=$5)  {print $0 }'       
Run Code Online (Sandbox Code Playgroud)

一致的副本集将列出:

   awk '$3==$4 && $4==$5 {print $0}'  
Run Code Online (Sandbox Code Playgroud)