有没有办法避免使用“grep -v”

有没有办法避免使用“grep -v”

跨管道执行 grep 过滤时,如以下示例所示,

$ ps -ef | grep 24604 
username   18660 24604  0 16:38 pts/3    00:00:00 ps -ef
username   18661 24604  0 16:38 pts/3    00:00:00 grep --color=auto 24604
username   24604 23548  0 Aug13 pts/3    00:00:00 /bin/bash

grep 命令本身是结果的一部分,通常 - 我用另一个grep -v,viz 将其过滤掉:

$ ps -ef | grep 24604 | grep -v grep
username   20375 24604  0 16:40 pts/3    00:00:00 ps -ef
username   24604 23548  0 Aug13 pts/3    00:00:00 /bin/bash

是否有一个grep参数可以过滤掉 grep 字符串?
(或者任何其他技巧可以避免grep -v?)

答案1

这通常通过在第一个字符周围放置括号来处理:

$ ps auxw | grep [c]ron
root      5710  0.0  0.0  10640  1800 ?        Ss   14:41   0:00 /usr/sbin/cron
$

这是可行的,因为cron不再出现在greps 命令行中([c]ron 会出现)。更现代的方法是使用命令(pgrep如果可用)。

答案2

怎么样:

pgrep -l 24604

这确实取决于用途,但pgrep通常更适合自动化,这可能就是您想要做的。

相关内容