![从 grep 命令返回多个模式的单个实例](https://linux22.com/image/140653/%E4%BB%8E%20grep%20%E5%91%BD%E4%BB%A4%E8%BF%94%E5%9B%9E%E5%A4%9A%E4%B8%AA%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%8D%95%E4%B8%AA%E5%AE%9E%E4%BE%8B.png)
我有一个返回数百行的命令的输出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; }'