2012-07-28 77 views
0

我正在尋找其中有撇號的線條,並嘗試了一些看起來與我完全相同的表達方式;然而,有些人工作,其他人沒有。爲什麼我會得到以下行爲:這些正則表達式爲什麼不同?

egrep \' file  # works as expected 

egrep "\'" file # seems to return all lines 

egrep "[\']" file # works as expected 

egrep '\'' file # seems to be waiting for more input 

回答

5

單引號對雙引號在轉義方面存在差異。把echo在前面看到什麼是真正被髮送到egrep

$ echo egrep \' file 
egrep ' file 
$ echo egrep "\'" file 
egrep \' file 
$ echo egrep "[\']" file 
egrep [\'] file 
$ echo egrep '\'' file 
> 

最後一種情況促使更多的投入,因爲你還是一個單引號表達式中:它不是單一的一個轉義引號(\')引號(因爲這不是你如何逃避單引號)。它是單引號之間的反斜槓,帶有尾隨的開引號。

順便說一句,逃單引號在單引號字符串,用建築這樣的:

$ echo 'foo'\''bar' 
foo'bar 

什麼這實際上做的是間把一個赤裸裸的文字引號(\')兩個單引號字符串。這些都是隱含地連接在一起的。

我不知道爲什麼"\'"匹配的所有行(但它確實看起來。)

+0

您的措辭有點誤導:_escaping with quotes_ sounds like you're _using_ quotes escape。好的建議重新:使用'回聲'來理清發生了什麼 – pb2q 2012-07-28 07:21:09

+0

你會如何逃避單引號中的字符? – bqui56 2012-07-28 07:25:01

0

我認爲你是在複雜的,如果你想匹配'引用它"

echo "'" | grep "'"