我想将START
和END
标记之间的每个文本块提取到单独的文件中。 Sed将是首选工具,但grep和awk也可以。
给出以下文件内容:
abc
START
def
END
ghi
START
jkl
END
mno
sed应分别使用以下内容创建两个文件:
START
def
END
和
START
jkl
END
我知道如何使用sed:
获取两个正则表达式之间的内容sed -n '/START/,/END/p'
在提供e
标志时,还有这个选项可以在sed中执行shell命令。这可以用于此任务吗?
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed '/START/,/END/!d' file | csplit -z - '/END/1' '{*}'
使用sed收集开始和结束分隔符之间的所有行,然后应用csplit为每组行创建单独的文件。
答案 1 :(得分:1)
要保存在这里:
awk '/END/{flag="";print > i"_file";close(i"_file");next} /START/{flag=1;print > ++i"_file";next} flag{print > i"_file"}' Input_file
输出它将创建2个名为1_file和2_file的文件,其中包含以下内容。
cat 1_file
START
def
END
cat 2_file
START
jkl
END
现在也添加非单线形式的解决方案。
awk '
/END/{
flag="";
print > i"_file";
close(i"_file");
next
}
/START/{
flag=1;
print > ++i"_file";
next
}
flag{
print > i"_file"
}
' Input_file
答案 2 :(得分:1)
非常有趣的csplit
谢谢potong
所以没有sed
csplit -z --suppress-matched infile %START%-1 /END/1 {*}
-m = --suppress-matched不起作用。
manpage fr tell -m但是错了。