grep不显示自己

最后更新时间:2022-05-31

要想在使用grep时不显示自己,常规有下面两种做法

ps -ef | grep "nginx"|grep -v "grep"

ps -ef | grep "[n]ginx"

grep -v 过滤grep自身可以通过man获取帮助。但是grep “[n]ginx”是如何实现不显示grep本身的了?

寻思很久,终于在stackoverflow上看到了一个醍醐灌顶的答案。

ps -ef | grep “[n]ginx” 命令中,grep 命令的参数是“[n]ginx”,正则[n]ginx当然不能匹配它!
ps -ef | grep "[n]ginx" 命令中,grep 命令的参数是正则表达式"[n]ginx",正则表达式"[n]ginx"可以匹配文本"nginx",但是不能匹配"[n]ginx"啊。

PS:我们使用grep时,也可能这样写ps -ef | grep [n]ginx (即grep的参数不带引号),虽然也是能工作,但是man文档建议大家还是要用引号包裹参数。

man grep:

grep searches for PATTERNS in each FILE. PATTERNS is one or more patterns separated by newline characters, and grep prints each line that matches a pattern. Typically PATTERNS should be
quoted when grep is used in a shell command.

《grep不显示自己》上有2条评论

  1. 厉害啊,知道博客存在有近三年了,这是我第一个看到的用word press搭建的博客,我自己也在阿里云买了个服务器,有一个站点差不多半年了,可是就是不敢写文字上去?,真的很佩服你,竟然能坚持写这么久的博客,向你学习。

  2. 你这样说没人看得懂,应该这样说:
    执行ps -ef | grep nginx的时候,进程里grep本身的进程是grep sshd,所以grep本身也会显示出来;而
    ps -ef | grep [n]ginx的时候,进程里grep本身的进程是grep [s]shd,所以grep本身不会显示出来。这里其实是利用了参数展开的问题,[s]shd作为grep的参数展开为sshd,作为shell参数则不展开。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

*