8

这个 SO question中有一些我无法解释的东西:

grep "\'" input_file

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

4

4 回答 4

6

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

于 2012-07-28T09:21:37.773 回答
3

这是一个非常奇怪的行为grep,我不知道如何解释它,但我必须注意它\'与任何字符都不匹配。它看起来与以下含义相同$

$ 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

具体怎么$做。

于 2012-07-28T09:02:09.793 回答
3

我不知道正则表达式的这个特性。但它在 regular-expressions.info 中列为字符串锚点的结尾。

它仅存在于 GNU 基本和扩展正则表达式中的所有正则表达式实现中,有关更多信息,请参阅此兼容性图表

于 2012-07-28T09:23:37.230 回答
-2

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

于 2012-07-28T08:45:58.700 回答