【发布时间】:2023-03-09 18:32:01
【问题描述】:
我需要一些关于 sed 的帮助。我正在尝试删除文件中所有出现的模式 之后的 3 行。我愿意
sed '/pattern/,+3d' file.
这只会删除 3 行和第一次出现的模式,但只会删除第二次出现的模式,而不是真正令人困惑的行。谁能帮我解决我做错了什么?
【问题讨论】:
-
请在您的问题中添加示例输入和该示例输入所需的输出。
我需要一些关于 sed 的帮助。我正在尝试删除文件中所有出现的模式 之后的 3 行。我愿意
sed '/pattern/,+3d' file.
这只会删除 3 行和第一次出现的模式,但只会删除第二次出现的模式,而不是真正令人困惑的行。谁能帮我解决我做错了什么?
【问题讨论】:
这可能对你有用(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
【讨论】:
我认为 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
【讨论】: