2012-07-28 74 views

回答

-2

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

+3

但即使文本文件不包含单引号字符,grep仍然匹配文件中的所有行。我认为这是OP所要求的。 – theon 2012-07-28 08:48:54

+0

是的,这很奇怪,grep匹配字面单引号的所有输入 – perreal 2012-07-28 08:51:07

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 

$究竟怎么做。

+0

对于''''''和'\'''有一点不同。 'echo x | grep“$ x”'匹配,但'echo x | grep“\”x“'不匹配。 – theon 2012-07-28 09:09:52

+3

您必须编写'grep'$ x''不是'grep'$ x“';因为'“$ x”'会被shell扩展,''$ x“'和''''(没有)是一样的。试试'echo“$ x”'和'echo'$ x'' – 2012-07-28 09:12:26

+0

当然。好点子。 – theon 2012-07-28 09:13:46

3

我不知道正则表达式的这一特点。但它作为end of the string定位点在regular-expressions.info上列出。

它只存在于GNU Basic和Extended Regular Expressions的所有正则表达式中,请参见compatibility chart了解更多信息。