使用"sed"删除包含某个内容及其下一行的行

3
假设有一个包含以下内容的文件:
good
good bad
next of baaaad
good

我想使用sed删除包含“bad”及其下一行的所有行。在上面的示例中,我想删除第2行和第3行。

我该如何做呢?

我尝试了这个方法,但它不起作用:

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

2
请注意,sed是严格按行处理的,因此模式空间永远不会包含换行符(除非您使用显式添加换行符的命令之一)。 - glenn jackman
5个回答

4

使用GNU sed,您可以使用匹配和跟随匹配的行数来指定地址范围:

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

3

sed 中:

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

以下的awk命令可以帮助您进行操作。
awk '/bad/{getline;next} 1'  Input_file

有没有办法使用 sed 来实现? - Ebrahim Ghasemi
@Abraham,请看一下我上面的更新,然后告诉我吧? - RavinderSingh13

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

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

在匹配到 /bad/ 的行后,将接下来的一行添加到模式空间中,然后删除整个内容。

3

这里是另一个与 gnu sed 一起使用的 sed 命令:

sed '/bad/,+1 d' file

good
good

这个sed命令允许您在匹配模式后删除任意数量的行,例如要删除匹配后的2行:

sed '/bad/,+2 d' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接