在模式中使用\ $时,我对grep end egrep的不同行为有了更深入的理解。
更具体一点:
grep "\$this->db" file # works
egrep "\$this->db" file # does not work
egrep "\\$this->db" file # works
有人可以告诉我为什么或链接一些解释? 非常感谢你。
答案 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
。这会转义$
,因此它被视为普通字符,而不是匹配行的末尾。