linux shell grep 如何去除它自己
问题:
在Linux shell编程中,常会用到grep命令对进程等进行关键字搜索,然后会对结果列表进行后处理,比如提取进程号等,再做进一步的处理。但是,grep结果会包含grep自己在内:
[docker@shanghai tmp]$ ps -ef | grep ssh
root 1088 1 0 08:43 ? 00:00:00 /usr/sbin/sshd -D
docker 6720 34421 0 20:16 pts/0 00:00:00 grep --color=auto ssh
root 34418 1088 0 19:10 ? 00:00:00 sshd: docker [priv]
docker 34420 34418 0 19:10 ? 00:00:00 sshd: docker@pts/0
root 41313 1088 0 17:26 ? 00:00:00 sshd: docker [priv]
docker 41316 41313 0 17:26 ? 00:00:00 sshd: docker@pts/6
root 41793 1088 0 19:23 ? 00:00:00 sshd: docker [priv]
docker 41797 41793 0 19:23 ? 00:00:00 sshd: docker@pts/2
解决:
解决的办法是对grep结果进行再过滤处理,去除包含grep关键字的列:
[docker@shanghai tmp]$ ps -ef | grep ssh | grep -v grep
root 1088 1 0 08:43 ? 00:00:00 /usr/sbin/sshd -D
root 34418 1088 0 19:10 ? 00:00:00 sshd: docker [priv]
docker 34420 34418 0 19:10 ? 00:00:00 sshd: docker@pts/0
root 41793 1088 0 19:23 ? 00:00:00 sshd: docker [priv]
docker 41797 41793 0 19:23 ? 00:00:00 sshd: docker@pts/2
这样,grep进程就会被去掉了。