2014-03-25 38 views
1

我找了接連的兩行匹配特定模式,比如說包含詞「拍打」使用SED和已經注意到,我可以用這個命令有時會檢測到它:檢測連續兩行相匹配的模式sed的

sed -n 'N; /.*pat.*\n.*pat.*/p' 

但如果重複項的行數不是相同的奇偶性,我認爲這是因爲我們正在搜索第1 + 2,3 + 4,5 + 6行等。如果是這種情況,這樣做的正確方法是什麼?

回答

7

爲什麼它需要是sed?我可以建議awk

awk '{/pat/?f++:f=0} f==2' file 

如果發現pat,增加f1
如果找不到pat,重置f0
如果f==2打印行。

+0

這是正確的嗎?我認爲當我們不匹配時需要別的東西。 –

+0

是的,我看到了,將修復 – Jotne

+0

@PalaceChan這應該做的。 – Jotne

1

這可能爲你工作(GNU SED):

sed '$!N;/pattern.*\n.*pattern/p;D' file 

這使得2號線模式空間和打印他們兩個出來,如果正則表達式匹配。

+0

它不僅會打印模式的第二行,但也是第一行。如果有三行圖案,它會打印第一行,第二行,第二行和第三行。 – Jotne

+0

@Jotne我認爲這是有意的,如果不將'p'改成'P'或改成'{p; d}'。 – potong

+0

更改爲「P」僅打印第一次打印。我假設他喜歡第二行發現,如果兩種模式出現在兩行(我可能是錯的)。如果有兩行相同的模式,則打印第一行可能沒問題。 – Jotne