【发布时间】:2013-06-13 06:43:34
【问题描述】:
我正在尝试过滤掉两种模式之间的文本,我已经看过十几个示例,但没有设法得到我想要的:
示例输入:
START LEAVEMEBE text
data
START DELETEME text
data
more data
even more
START LEAVEMEBE text
data
more data
START DELETEME text
data
more
SOMETHING that doesn't start with START
@ sometimes it starts with characters that needs to be escaped...
我想留下来:
START LEAVEMEBE text
data
START LEAVEMEBE text
data
more data
SOMETHING that doesn't start with START
@ sometimes it starts with characters that needs to be escaped...
我尝试通过以下方式运行 sed:
sed 's/^START DELETEME/,/^[^ ]/d'
并获得了包容性删除,我尝试添加“排除”(不确定我是否真的很好地理解了这个语法):
sed 's/^START DELETEME/,/^[^ ]/{/^[^ ]/!d}'
但我的“START DELETEME”行仍然存在(是的,我可以将其 grep 出来,但这很丑 :) 而且 - 它也删除了此示例中的空行,我想留下空行如果它们是我的完整模式) 我想知道是否有办法用一个 sed 命令来做到这一点。 我有一个很好的 awk 脚本:
BEGIN { flag = 0 }
{
if ($0 ~ "^START DELETEME")
flag=1
else if ($0 !~ "^ ")
flag=0
if (flag != 1)
print $0
}
但正如您所知,“A 代表运行起来像蜗牛一样的 awk”。这需要很长时间。
提前致谢。 戴夫。
【问题讨论】: