![从格式化为带空格的表格的字符串中,如何 grep 所有列相等的所有值?](https://linux22.com/image/743073/%E4%BB%8E%E6%A0%BC%E5%BC%8F%E5%8C%96%E4%B8%BA%E5%B8%A6%E7%A9%BA%E6%A0%BC%E7%9A%84%E8%A1%A8%E6%A0%BC%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%20grep%20%E6%89%80%E6%9C%89%E5%88%97%E7%9B%B8%E7%AD%89%E7%9A%84%E6%89%80%E6%9C%89%E5%80%BC%EF%BC%9F.png)
问题来自于这个问题: 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}'