如何获取sed以提取两个模式之间的行,将该数据写入文件,然后提取下一个范围之间的行并将该文本写入另一个文件?例如,给出以下输入:
pattern_a
line1
line2
line3
pattern_b
pattern_a
line4
line5
line6
pattern_b
我希望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
使用sed有一种漂亮的方式吗?或者会更好吗?
答案 0 :(得分:8)
这个怎么样:
awk '/pattern_a/{f=1;c+=1;next}/pattern_b/{f=0;next}f{print > "outfile_"c}' input_file
这将为每个范围创建outfile_x
。