跨管道执行 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
不再出现在grep
s 命令行中([c]ron 会出现)。更现代的方法是使用命令(pgrep
如果可用)。
答案2
怎么样:
pgrep -l 24604
这确实取决于用途,但pgrep
通常更适合自动化,这可能就是您想要做的。