如何防止“grep”出现在 ps 结果中?

如何防止“grep”出现在 ps 结果中?

当我搜索一些不存在的进程时,例如

$ 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 中才能使用。

相关内容