2013-10-02 30 views
0

在模式中使用\ $时,我正在理解grep end egrep的不同行为。egrep和grep与美元的区别

更具体:

grep "\$this->db" file # works 

egrep "\$this->db" file # does not work 

egrep "\\$this->db" file # works 

有人能告诉我为什么或链接一些解释? 非常感谢。

回答

1

反斜杠正在被外壳的转义处理所消耗,所以在前两种情况下,正则表达式只是$this->db。区别在于grep将不在正则表达式末尾的$视为普通字符,但egrep将其视为匹配行尾的正则表达式。

在最后一种情况下,双反斜杠会将反斜杠发送到egrep。这逃避了$,所以它被视为一个普通的字符而不是匹配行的末尾。

1

参见man grep

-E, --extended-regexp 
       Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.) 

如果正则表达式被激活(通过egrep使用)之类的元字符反斜杠必须用反斜杠转义。因此需要\\来匹配文字反斜杠。