为什么grep匹配模式“\”的所有行

时间:2012-07-28 08:39:00

标签: regex grep

this SO question中有一些我无法解释的内容:

grep "\'" input_file

匹配给定文件中的所有行。 \'对grep有特殊含义吗?

4 个答案:

答案 0 :(得分:6)

grep regex GNU extension:'\''匹配整个输入的结尾

答案 1 :(得分:3)

这是一个非常奇怪的grep beaviour,我不知道如何解释它,但我必须注意\'与任何角色都不匹配。看起来它与$具有相同的含义:

$ echo x | grep "x\'"
x
$ echo xy | grep "x\'"
$ echo x | grep "\'x"

更新1

正如http://www.gnu.org/software/findutils/manual/html_node/find_html/grep-regular-expression-syntax.html中所述(感谢Richard Sitze的链接),它与$具有相同的含义。但同时我注意到\'$之间存在差异:

$ echo x | grep 'x$'
x
$ echo x | grep 'x$$'
$ echo x | grep "x\'"
x
$ echo x | grep "x\'\'"
x
$ echo x | grep "x\'\'\'"
x

您可以根据需要多次指定\',但$则不然。必须只有一个$

另一个重要的评论。手册说:

 ‘\'’ matches the end of the whole input

但严格来说,这不是真理,因为\'不仅匹配整个输入的结尾,还匹配每一行的结尾:

$ (echo x; echo y) | grep "\'"
x
y

$的具体方式。

答案 2 :(得分:3)

我不知道正则表达式的这个功能。但它在regular-expressions.info中列为end of the string锚。

仅在GNU Basic和Extended Regular Expressions中的所有正则表达式实现中都不存在,有关详细信息,请参阅此compatibility chart

答案 3 :(得分:-2)

\是一个转义字符。这意味着'应该被视为要搜索的文本,而不是控制角色。