2012-07-28 112 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瞭解更多信息。