我正在寻找两个与某个模式相匹配的连续行,比如说使用sed包含单词'pat',并注意到我有时可以使用此命令检测到它:
sed -n 'N; /.*pat.*\n.*pat.*/p'
但如果重复项的行号不是相同的奇偶校验,则此命令会失败,我认为这是因为我们正在搜索第1 + 2,3 + 4,5 + 6行等。如果是这种情况,这样做的正确方法是什么?
答案 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行,并在正则表达式匹配时将它们打印出来。