当在模式中使用\$时,我可以触摸到grep end egrep的不同行为。
更具体而言:
grep "\$this->db" file # works
egrep "\$this->db" file # does not work
egrep "\\$this->db" file # works有人能告诉我为什么或者联系一些解释吗?非常感谢。
发布于 2013-10-02 22:01:21
反斜杠被外壳的转义处理吃掉,所以在前两种情况下,regexp只是$this->db。不同之处在于,grep将不位于regexp末尾的$视为普通字符,而egrep则将其视为与行尾匹配的正则表达式。
在最后一种情况下,双反斜杠导致反斜杠被发送到egrep。这将转义$,因此它被视为普通字符,而不是与行尾匹配。
发布于 2013-10-02 22:00:25
请参阅man grep
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)如果regex被激活(通过使用egrep),像反斜杠这样的元字符必须用反斜杠转义。因此,\\需要匹配一个文字反斜杠。
https://stackoverflow.com/questions/19147498
复制相似问题