在模式中使用\ $时,我正在理解grep end egrep的不同行为。egrep和grep与美元的区别
更具体:
grep "\$this->db" file # works
egrep "\$this->db" file # does not work
egrep "\\$this->db" file # works
有人能告诉我为什么或链接一些解释? 非常感谢。
在模式中使用\ $时,我正在理解grep end egrep的不同行为。egrep和grep与美元的区别
更具体:
grep "\$this->db" file # works
egrep "\$this->db" file # does not work
egrep "\\$this->db" file # works
有人能告诉我为什么或链接一些解释? 非常感谢。
反斜杠正在被外壳的转义处理所消耗,所以在前两种情况下,正则表达式只是$this->db
。区别在于grep
将不在正则表达式末尾的$
视为普通字符,但egrep
将其视为匹配行尾的正则表达式。
在最后一种情况下,双反斜杠会将反斜杠发送到egrep
。这逃避了$
,所以它被视为一个普通的字符而不是匹配行的末尾。
参见man grep
:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)
如果正则表达式被激活(通过egrep
使用)之类的元字符反斜杠必须用反斜杠转义。因此需要\\
来匹配文字反斜杠。