2016-05-22 154 views
0

當我運行這些命令,我​​得到的輸出是這樣的:這些正則表達式爲什麼不按預期工作?

Screenshot of Terminal

下面是命令和輸出,以文本形式:

$ cat exte 
i 
ii 
iii 
iiii 
iiiii 
iiiiii 

這工作得很好:

$ egrep --color i\{4,5\} exte 
iiii 
iiiii 
iiiiii 

我想它應該只顯示一個或兩個「我」的一行顏色,但輸出顏色的一切:

$ egrep --color i\{1,2\} exte 

i 
ii 
iii 
iiii 
iiiii 
iiiiii 

同樣,我看不到擴展的正則表達式在這裏工作:

$ egrep --color i? exte 
i 
ii 
iii 
iiii 
iiiii 
iiiiii 


$ egrep --color i+ exte 
i 
ii 
iii 
iiii 
iiiii 
iiiiii 
+1

使用單詞邊界。 –

+1

Jup,與我{1,2}你得到多個匹配的同一行。所以要麼使用字邊界,要麼使用^ i {1,2} $,所以它也考慮行的開始和結束。 – LukStorms

+1

對於i +和i?的最後兩個例子,這些行包含幾個i,每個匹配一個(非 - 或更多)(?)或(一個或多個)(+),因此一切都是正確的,請解釋一下/爲什麼你期望 –

回答

1

這個命令所有的顏色,因爲在你的文件中有很多我的。

$ egrep --color i\{1,2\} exte 
i 
ii 
iii 
iiii 
iiiii 
iiiiii 

以輸出中的第三行爲例。您沒有爲行匹配的行或行的結尾指定任何約束。所以,它一個接一個匹配。所以,前兩個我在第二個第三行是匹配的。對於第三個我檢查條件,那個時候條件是真的。所以,它匹配所有。

如果你想要更清晰的輸出,你可以使用-o選項來匹配什麼。

-o: -

僅打印匹配的(非空)的匹配線的部位,用在一個單獨的輸出線每一個這樣的部分。

$ egrep --color i? exte 

The?以grep正則表達式標記,它匹配前一個字符的零次或一次出現。所以,它也像上面的命令一樣工作。所有的我都一一匹配正則表達式。

$ egrep --color i+ exte 

+表示匹配一個或多個前一個字符的出現。 因此,它匹配所有的我一行一行的單一事件。

如果您希望將輸出看作清晰格式,則必須使用-o選項。

相關問題