在单个grep调用中组合多个greps

时间:2012-09-29 20:13:45

标签: grep

我有一个脚本,我要检查进程是否按其名称运行,我使用psgrep进行操作。问题在于我要抓住很多东西以避免发现误报。

到目前为止,我的grep链看起来如下:

ps -ef | grep -i $process_name | grep -i perl | grep -v do_all | grep -v grep

grep秒。其中三个是为了避免误报。

我想知道是否有办法避免这种“管道链”并使用单个grep来实现相同的结果。

虽然你们中的一些人可以回答说有一个更清晰的方法来确定一个进程是否存在,但我希望能够回答这个问题,只是为了更好地理解grep命令的用法。

2 个答案:

答案 0 :(得分:2)

没有真正的理由避免将它们链接起来,是吗?

如果你真的想要,你可以将它们与|结合起来在egrep:

ps -ef | egrep -i "$process_name|perl" |  egrep -v 'do_all|grep'

答案 1 :(得分:1)

这是使用GNU awk的一种方式:

ps -ef | awk -v process="$process_name" 'BEGIN { IGNORECASE=1 } $0 ~ process && /perl/ && !/do_all/'