egrep和grep与美元的差异

时间:2013-10-02 21:55:47

标签: bash shell grep

在模式中使用\ $时,我对grep end egrep的不同行为有了更深入的理解。

更具体一点:

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

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

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

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

2 个答案:

答案 0 :(得分:1)

请参阅man grep

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

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

答案 1 :(得分:1)

反斜杠正在被shell的转义处理吃掉,因此在前两种情况下,正则表达式只是$this->db。区别在于grep将不在正则表达式末尾的$视为普通字符,但egrep将其视为与行尾相匹配的正则表达式

在最后一种情况下,双反斜杠会将反斜杠发送到egrep。这会转义$,因此它被视为普通字符,而不是匹配行的末尾。