我该如何用sed提取两种模式之间的界限,即数据写入一个文件,然后提取下一范围之间的界限和写入文本到另一个文件?例如,给出以下输入:
pattern_a
line1
line2
line3
pattern_b
pattern_a
line4
line5
line6
pattern_b
Run Code Online (Sandbox Code Playgroud)
我希望line1 line2和line3出现在一个文件中,line4 line5和line6出现在另一个文件中.我看不出这样做,而无需使用一个循环,并保持循环迭代之间的一些状态,其中状态告诉你在哪里SED必须开始启动搜索来寻找开始模式(pattern_a)再次的方式.
例如,在类似bash的伪代码中:
while not done
if [[ first ]]; then
sed -n -e '/pattern_a/,/pattern_b/p' > $filename
else
sed -n -e '$linenumber,/pattern_b/p' > $filename
fi
linenumber = last_matched_line
filename = new_filename
Run Code Online (Sandbox Code Playgroud)
使用sed有一种漂亮的方式吗?或者会更好吗?
这个怎么样:
awk '/pattern_a/{f=1;c+=1;next}/pattern_b/{f=0;next}f{print > "outfile_"c}' input_file
Run Code Online (Sandbox Code Playgroud)
这将为outfile_x每个范围创建一个.