2013-10-07 52 views
-1

我需要一個正則表達式來匹配使用egrep它檢查一個模式,如長請求字符串。如果我們將模式看作a_b_c。我想要b是除2,3,4和13之外的任何東西。負面看法的正則表達式

回答

0

egrep不支持縮略圖。

您可以使用grep -P(PCRE)

grep -P '^[0-9]*_(?!(2|3|4|13)_)[0-9]*_[0-9]*$' file 

否則,如果上面的圖案是一個字符串中間找到,那麼使用單詞邊界,而不是行的開始/結束錨:

grep -P '\b[0-9]*_(?!(2|3|4|13)_)[0-9]*_[0-9]*\b' file 
+0

這將排除a_22_c - 我認爲負面展望應包括結尾下劃線。它也會匹配'a_2_c a_x_c'這將包括一個不想要的命中 – Bohemian

+0

@波希米亞:謝謝你好點,我糾正。 – anubhava

2

這應該這樣做:

grep -P '\b[^_]+_(?!(2|3|4|13)_)[^_]+_[^_]+\b' myfile 

如果您的條款都是數字,請將其細化爲:

grep -P '\b\d+_(?!(2|3|4|13)_)\d+_\d+\b' myfile 

注意-P標誌開啓perl的可比性,這使得看上去aheads

0

爲清楚和簡單:

awk '/a_[^_]+_c/ && !/a_(2|3|4|13)_c/' file 

這將幫助我們來幫助你,不過,如果你發佈一些樣本輸入和預期輸出。