使用“ sed”删除包含某些内容的行和下一行

时间:2018-06-21 15:33:19

标签: regex sed

假设文件包含以下内容:

good
good bad
next of baaaad
good

我想使用sed删除包含“坏”的行以及这些行的下一行。在上面的示例中,我想删除第2行和第3行。

我该怎么做?

我尝试过此方法,但不起作用:

ebra@him:/tmp$ cat iio | sed -e "s/\n.*bad.*\n.*//"
good
good bad
next of baaaad
good

5 个答案:

答案 0 :(得分:3)

sed中:

sed '/bad/{N;d}'  Input_file

遵循awk可能会对您有所帮助。

awk '/bad/{getline;next} 1'  Input_file

答案 1 :(得分:3)

尝试一下:

sed '/bad/{N;d}' file

例如:

kent$  cat f
1good
2good bad
3good --
4good
5bad
6good--
7good

kent$  sed '/bad/{N;d}' f
1good
4good
7good

答案 2 :(得分:3)

sed -e '/bad/{N;d;}' 

在与/bad/匹配的行上,将下一行附加到模式空间,然后删除整个内容。

答案 3 :(得分:3)

使用GNU sed,您可以指定具有匹配项的地址范围以及匹配项后的行数:

$ sed '/bad/,+1d' infile
good
good

答案 4 :(得分:2)

这是另一个与sed配合使用的gnu sed命令:

sed '/bad/,+1 d' file

good
good

通过此sed,您可以在匹配模式后删除任意数量的行,例如在比赛后删除2行:

sed '/bad/,+2 d' file