2014-11-15 102 views
0

我正在刷我的正則表達式,看看我能做什麼,並縮小我的標準編碼風格。然後我寫了一個本應該工作的小片段,但不會。所以我一直減少它的最基本形式,但仍不能做我想做的事情:爲什麼這個簡單的正則表達式不工作

echo "a" | sed -e 's/a+/A/g' 

爲何不輸出

A 

我只是感到困惑,爲什麼這不工作...

+0

+是一個擴展正則表達式。採用-r – Kalanidhi

+0

@KalanidhiM。它也可以在POSIX正則表達式中使用,但是您需要將其轉義:'\ +'。但這裏並不需要'+' – hek2mgl

+0

「a +」是一個代表一個或多個「a」的元字符的替代方法,它代表一個「a」,後跟零個或多個「a」秒。注: '+'是GNU增強功能,需要轉義或啓用'-r'開關,而'aa *'在所有seds中都可用。 – potong

回答

1

你不需要+。如果你想通過一個大寫的A替換每小寫a您可以使用此:

echo "abcdabdbda" | sed 's/a/A/g' 

輸出:

AbcdAbdbdA 

+是一個正則表達式特殊字符。它與前面的字符或組至少匹配一次或多次。這裏你不需要它。

注意:如果您在標準sed正則表達式模式中使用+,則需要將其轉義:\+以賦予其特殊含義。如果沒有逃脫,它會像文字+一樣受到威脅。

+0

也許他想將多個'aaa'合併成一個'A'? – sln

+0

這個問題太不清楚了。我假設他知道'/ g'和'+'之間的區別..但是不確定。 – hek2mgl

1

如果您希望它使用此語法,您需要確保sed將正則表達式解釋爲擴展正則表達式。

要做到這一點,你可以在Mac OSX使用-E

echo "a" | sed -E -e 's/a+/A/g' 

-r標誌在Linux上:

echo "a" | sed -r -e 's/a+/A/g' 
+0

爲什麼這裏需要'+'?請注意,即使在簡單的正則表達式中也可以使用'+',但是您需要將其轉義:'\ +' – hek2mgl

+0

在這種情況下,不需要'+',但是由於OP寫道這是一個簡化的例子,原來的情況確實需要它。 – ebo

相關問題