如何使用sed删除与模式匹配的行及其后的行?

时间:2013-07-26 21:13:36

标签: linux unix sed

我有一个类似于:

的文件
good text
good text
FLAG bad text
bad text
good text
good text
good test
bad Text FLAG bad text
bad text
good text

我需要删除任何包含“FLAG”的行总是需要删除“FLAG”行后面的一行。

“FLAG”行不规则,我不能依赖任何类型的行号策略。

任何人都知道如何用sed做到这一点?

3 个答案:

答案 0 :(得分:9)

使用GNU版本的扩展程序:

sed -e '/FLAG/,+1 d' infile

它产生:

good text
good text
good text
good text
good test
good text

答案 1 :(得分:9)

这有效,并且不依赖于任何扩展名:

sed '/FLAG/{N
d
}' infile

N读取模式空间中的下一行,然后d删除模式空间。

答案 2 :(得分:2)

以下是awk的一种方式:

awk '/FLAG/{f=1;next}f{f=0;next}1' file

awk '/FLAG/{getline;next}1' file