最后更新时间: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.
厉害啊,知道博客存在有近三年了,这是我第一个看到的用word press搭建的博客,我自己也在阿里云买了个服务器,有一个站点差不多半年了,可是就是不敢写文字上去?,真的很佩服你,竟然能坚持写这么久的博客,向你学习。
你这样说没人看得懂,应该这样说:
执行ps -ef | grep nginx的时候,进程里grep本身的进程是grep sshd,所以grep本身也会显示出来;而
ps -ef | grep [n]ginx的时候,进程里grep本身的进程是grep [s]shd,所以grep本身不会显示出来。这里其实是利用了参数展开的问题,[s]shd作为grep的参数展开为sshd,作为shell参数则不展开。