2017-01-02 19 views
1

我想要一個正則表達式,每次都捕獲+other以及所有內容,直到下一個逗號。正則表達式捕獲一個模式加上一切後的所有內容,直到達到一個字符

隨着

(word),+(other)(word),(code),(word),(other)(code),(example) 
(code),+(other),+(other)(code)(word)(example),(example),+(example) 
+(code),(other)(code)(word),(code),(word) 

我想回到

+(other)(word) 
+(other) 
+(other)(code)(word)(example) 

我的命令,我會用看起來像egrep -o '\+\(other).*,。 唯一的問題是,這個正則表達式中的逗號不一定是下一個逗號。眼下命令返回

+(other)(word),(code),(word),(other)(code), 
+(other),+(other)(code)(word)(example),(example), 
+1

所以,試圖'egrep的-o「\ + \(其他)[^,] *, '還沒? –

+0

而不是預期的輸出?從「+(其他)」到* first *逗號的字符串?爲什麼不能用'+(other)(code)(word)(example)'來匹配?請用推理更新問題。 –

+0

因此,編輯後,看起來像'egrep -o'\ + \(其他)[^,] *'應該足夠了嗎? –

回答

1

你消耗任何0+字符儘可能多地到最後一個(含),.*,

爲了避免匹配,和僅匹配到第一,,使用否定括號表達式[^,]並應用*量詞它:

egrep -o '\+\(other\)[^,]* 

[^,]*模式會匹配比,其他任何0+字符。

+0

謝謝!我還有一個問題不在上面,如果我想讓字母p和一個 - 符號出現在\(其他\)之後,但在下一個逗號之前,我怎麼可以合併它。這是我現在能想到的所有'\ + \(other \)。* p。* \ - 。* [^,] *'但是我的。*又一次捕獲所有東西 – Jacob

+1

這意味着使用相同的「回火「\ \ \(其他\)[^,] * p [^,] * - [^,] *'([demo](https://regex101.com/r/syNSbc/1) ) –

+0

[^,] *究竟是什麼,因爲對我來說,這似乎意味着在行首開始的任意數量的逗號,並且在這種情況下對我沒有意義 – Jacob

0

如果你的grep支持Perl兼容的正則表達式(PCRE),可以使用非貪婪匹配:

$ grep -Po '\+\(other\).*?,' infile 
+(other)(word), 
+(other), 
+(other)(code)(word)(example), 
相關問題