日期:2014-05-16  浏览次数:20870 次

【求解释】ps ag | egrep "正则',正则管道的问题
各位兄弟, 有个问题,帮忙解释一下

$ ps ag | egrep "watchwho$"
19603 pts/1    S+     0:00 /bin/bash /home/me/bin/watchwho
19605 pts/1    S+     0:00 /bin/bash /home/gavin/bin/watchwho
$ ps ag | egrep "watchwho"
19603 pts/1    S+     0:00 /bin/bash /home/me/bin/watchwho
19605 pts/1    S+     0:00 /bin/bash /home/me/bin/watchwho
20569 pts/2    S+     0:00 egrep --color=auto watchwho

为什么用egrep 正则 "watchwho$" 匹配不显示下面这行呢?
20569 pts/2    S+     0:00 egrep --color=auto watchwho  

而下面这样却可以?  我猜测是管道| 命令的问题,兄弟们,你们怎么看?

$ ps ag | egrep "watchwho"  > temp
$ cat temp | egrep "watchwho$"
19603 pts/1    S+     0:00 /bin/bash /home/me/bin/watchwho
19605 pts/1    S+     0:00 /bin/bash /home/me/bin/watchwho
20827 pts/2    S+     0:00 egrep --color=auto watchwho
正则 egrep shell 管道 grep

------解决方案--------------------
应该不是这样的吧

ps ag 
------解决方案--------------------
 egrep "watchwho$"

对egrep的参数来说,输入是 watchwho$
即这个时候ps看到的是  egrep --color=auto watchwho$
显然这个时候不是满足egrep的匹配的,所以没列出来

ps ag 
------解决方案--------------------
 tee pslog 
------解决方案--------------------
 egrep "watchwho$"

lz可以用以上命令验证
------解决方案--------------------
这整个命令去执行。
ps ag 
------解决方案--------------------
 egrep "watchwho$"

然后egrep "watchwho\$$"这样子的才会匹配到上面这个命令。

所以本身会除去了。

类似egrep "[w]atchwho"的形式一样,需要egrep "\[w\]atchwho"的方式才能把它grep出来。