2014-03-25 35 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