我有一个返回数百行的命令的输出ps -ef
,我需要 grep 查找一个几乎相同的模式(除了末尾的数字),并且返回每个模式的单个实例。例子:
这个特定的ps -ef
命令输出几十行,每行包含字符串svc-0
或svc-5
或 0 到 5 之间的任何数字,这些svc
数字是随机分配的。如果我这样做,grep -Eo 'svc-[0-5]'
它只会进行模式匹配并返回每一行的每个实例。我只需要确认svc-0
和的存在svc-5
。我希望的输出是:
svc-0
svc-5
我不能只-m2
在 grep 中添加 an ,因为这些svc
行通常会连续重复多次,例如:
svc-5
svc-5
svc-5
svc-5
svc-5
svc-0
svc-0
svc-0
svc-0
svc-0
答案1
您可以使用 awk 过滤器来查找两种所需的模式;如果两者都找到,则成功退出,否则以“失败”退出:
ps -ef ... | awk '/svc-0/ { zero++; } /svc-5/ { five++; } END { if (zero && five) exit 0; exit 1; }'