在sed中提取两种模式

时间:2016-11-01 03:15:09

标签: linux bash sed

输入文字文件:

#END
this should not be extracted
#BEGIN    
This should be extracted.
#BEGIN
keep going..
These lines should be extracted by our script.

Everything here will be copied.
#END
That should be all.
#BEGIN
Nothing from here.
#END

期望的输出:

This should be extracted.
#BEGIN
keep going..
These lines should be extracted by our script.

Everything here will be copied.

我的sed脚本是:

/#BEGIN/,/#END/!d
/#END/q
/#BEGIN/,/#END/{/#BEGIN/d;/#END/d;p;}

除了忽略第一个#END并打印第一个#BEGIN #END块(包括嵌套的#BEGIN)中的内容之外,我的脚本可以完成我想要它做的大部分工作。我不确定如何更改我的脚本以满足这些限制。

1 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -n '/^#BEGIN/,/^#END/!b;//!p;/^#END/q' file

将打印的行限制在#BEGIN#END之间,并仅打印非页眉/页脚行。点击第一个#END时退出。

N.B。在打印命令之后放置正则表达式以退出允许第二个或更多标题保留在输出中。