假设文件包含以下内容:
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
答案 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