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