2012-06-28 30 views
0

我對後顯示寄託都「(」正則表達式:桑達相匹配的第一個重複字符的

echo "apples (orange) (plum)" | sed -re 's/^.+\(//' 

輸出:plum)

預期輸出:orange) (plum)

我怎麼能趕上第一發生的字符而不是最後一個?

回答

1
echo "apples (orange) (plum)" | sed -re 's/^[^(]+\(//' 

。匹配任何字符,因此sed觀看行中的最後一個括號。 因此.墊片(^[^(]+\(墊片apples (orange) (。 因此,您需要使用[^(]*來完全不符合您所建議的任何(

+0

這對我來說:)謝謝你的解釋 – Gil

1

不能。 。*和。+總是貪婪。還有其他方法可以做到這一點。

刪除所有領先的非(

$ sed 's/[^(]*(//' <<<'apples (orange) (plum)' 
orange) (plum) 

或者幾乎等同,而不是真正的改善將節省使用一組的第二部分。

$ sed 's/[^(]*(\(.*\)$/\1/' <<<'apples (orange) (plum)' 
orange) (plum) 
相關問題