Sed:删除所有出现的模式后的行

时间:2018-09-23 08:12:58

标签: bash sed

我需要sed的帮助。我正在尝试删除文件中出现的所有样式 之后的3行。我

sed '/pattern/,+3d' file.

这只会删除3行和第一次出现的模式,但只会删除第二次出现的模式,但不会删除之后的行,这确实令人困惑。有人可以帮忙解决我在做什么吗?

2 个答案:

答案 0 :(得分:0)

我认为 awk 更适合该任务。例如,

$ cat file
1
2
4
a0
1
a1
1
2
3
4
5

运行

awk '
flag   { i ++            }
i == 3 { flag = 0        }
!flag
/a/    { flag = 1; i = 0 }
' file

输出

1
2
4
a0
3
4
5

答案 1 :(得分:0)

这可能对您有用(GNU sed):

sed -n '/regexp/{p;:a;n;//ba;n;//ba;n;//ba;d};p' file

如果遇到正则表达式,请打印当前行,然后删除以下3行。在读取这三行代码的任何时候,都会发生正则表达式,请重置计数。

如果正则表达式也要删除,请使用:

sed -n '/regexp/{:a;n;//ba;n;//ba;n;//ba;d};p' file