在执行“ps aux | grep 进程”时删除带“grep”的那行

通常情况下,你总是会结合使用 psgrep 的方式来筛选出只包含某个进程名的那些行,比如:

root@twofei:~# ps aux | grep nginx
root      9926  0.0  0.1  23388   948 ?        Ss   Mar15   0:00 nginx: master process ./sbin/nginx
nobody   21964  0.0  0.3  23388  1536 ?        S    Mar16   0:16 nginx: worker process
nobody   21965  0.0  0.4  23388  2032 ?        S    Mar16   0:14 nginx: worker process
nobody   21966  0.0  0.4  23716  2192 ?        S    Mar16   0:16 nginx: worker process
root     29249  0.0  0.1  11744   920 pts/0    S+   23:15   0:00 grep --color=auto nginx

结果是出来了,但你有没有注意到最后一行?

没事,多出了一个 grep自身 命令的行,再 grep 一次即可!

root@twofei:~# ps aux | grep nginx | grep -v grep
root      9926  0.0  0.1  23388   948 ?        Ss   Mar15   0:00 nginx: master process ./sbin/nginx
nobody   21964  0.0  0.3  23388  1536 ?        S    Mar16   0:16 nginx: worker process
nobody   21965  0.0  0.4  23388  2032 ?        S    Mar16   0:14 nginx: worker process
nobody   21966  0.0  0.4  23716  2192 ?        S    Mar16   0:16 nginx: worker process

但是有一个问题,第2次 grep 之后,没有颜色了!

那怎么办?可以试试下面的改进。

root@twofei:~# ps aux | grep '[n]ginx'
root      9926  0.0  0.1  23388   948 ?        Ss   Mar15   0:00 nginx: master process ./sbin/nginx
nobody   21964  0.0  0.3  23388  1536 ?        S    Mar16   0:16 nginx: worker process
nobody   21965  0.0  0.4  23388  2032 ?        S    Mar16   0:14 nginx: worker process
nobody   21966  0.0  0.4  23716  2192 ?        S    Mar16   0:16 nginx: worker process

你知道原因吗?

解释:grep 本身是一种正则表达式模式匹配工具,也就是说在搜索匹配时执行的是模式匹配,而不是简单的单个字符的依次比较匹配。而上面的例子:把某个字符放在中括号内将不改变grep模式搜索表达式本身的意义,它的意义是指中括号的字符一定要出现一次!而此处恰好与搜索nginx等效。但是:它现在已经不能匹配执行 "ps aux | grep '[n]ginx'" 的命令行了!不明白?找grep手册去了解什么是正则表达式!

外部链接

参考:Quick Shell Tip: Remove grep command while grepping something using ps command

发表于:2015年04月09日 ,阅读量:1596 ,标签:linux

版权声明:若非特别注明,本站所有文章均为作者原创,转载请务必注明原文地址。