当我搜索一些不存在的进程时,例如
$ ps aux | grep fnord
wayne 15745 0.0 0.0 13580 928 pts/6 S+ 03:58 0:00 grep fnord
显然我不关心 grep - 这与搜索进程一样有意义ps
!
如何防止 grep 出现在结果中?
答案1
事实证明,找到了解决方案钥匙链。
$ ps aux | grep "[f]nord"
通过在字母周围加上方括号,在字符串周围加上引号,您可以搜索正则表达式,即“查找字符 'f' 后跟 'nord'”。
但由于您将括号放在模式“f”中,现在后面跟着“]”,因此grep
不会显示在结果列表中。尼托!
答案2
我使用的另一个选项(特别是只是为了查看进程是否正在运行)是命令pgrep
。这将搜索匹配的进程,但不会列出用于搜索的 grep 行。我喜欢它,因为它是一种快速的搜索方式,无需重新调整或转义任何内容。
pgrep fnord
此外,要打印正在匹配的进程 ID 和进程名称,请使用(感谢菲默尔)
pgrep -l fnord
答案3
BriGuy 提出的解决方案是理想的解决方案
pgrep fnord
但如果您不想这样做,您可以排除所有与grep和:
ps aux | grep -v grep | grep "fnord"
答案4
在 zsh 中,grep fnord =(ps aux)
.
这个想法是,首先运行ps aux
,将结果放入文件中,然后grep
在该文件上使用。只是,我们没有文件,因为我们使用 zsh 的“进程替换”。
为了说明这一点,尝试
ps aux > ps.txt
grep fnord ps.txt
rm ps.txt
结果应该是一样的。
一般评论关于其他一些答案。有些过于复杂和/或打字很长。这不仅是正确的问题,而且还应该可用。但这并不意味着其中一些解决方案不好;而是意味着其中一些解决方案不好。只是,它们必须封装在迷你 UI 中才能使用。