使用sed检测与模式匹配的两个连续行

时间:2014-03-25 19:24:30

标签: sed

我正在寻找两个与某个模式相匹配的连续行,比如说使用sed包含单词'pat',并注意到我有时可以使用此命令检测到它:

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

但如果重复项的行号不是相同的奇偶校验,则此命令会失败,我认为这是因为我们正在搜索第1 + 2,3 + 4,5 + 6行等。如果是这种情况,这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

为什么需要sed?我可以建议awk吗?

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

如果找到pat,请使用f增加1 如果找不到pat,请将f重置为0 如果f==2打印该行。

答案 1 :(得分:2)

这可能适合你(GNU sed):

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

这样可以在模式空间中保留2行,并在正则表达式匹配时将它们打印出来。

相关问题