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

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

问题来自于这个问题: 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

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

grep -v '0         0         0\|1         1         1\|2         2         2\|3         3         3\|4         4         4\|5         5         5'

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

答案1

grep当你的模式既不是固定字符串也不是正则表达式时,效果就不是很好了。

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

   kubectl get replicasets -n kube-system | awk '$3!=$4 || $4!=$5 {print $0}'

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

您可以使用以下方式省略标题:

    awk 'NR!=1 && ($3!=$4 || $4!=$5)  {print $0 }'       

一致的副本集将列出:

   awk '$3==$4 && $4==$5 {print $0}'  

相关内容