[英]Sed: delete lines after a pattern for all occurences
我需要sed的帮助。 我正在尝试删除文件中所有出现的模式后的3行。 我做
sed '/pattern/,+3d' file.
这只会删除3行和第一次出现的模式,但只会删除第二次出现的模式,但不会删除之后的行,这确实令人困惑。 谁能帮我解决我的错?
我认为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
这可能对您有用(GNU sed):
sed -n '/regexp/{p;:a;n;//ba;n;//ba;n;//ba;d};p' file
如果遇到正则表达式,请打印当前行,然后删除以下3行。 在读取这3行的任何时候,都会发生正则表达式,请重置计数。
如果正则表达式也要删除,请使用:
sed -n '/regexp/{:a;n;//ba;n;//ba;n;//ba;d};p' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.