2012-07-07 35 views
2

我想在水平分隔符之间获得多行文本,并在分隔符之前和之后忽略其他任何内容。在水平分隔符与sed/awk之间获取多行文本

一个例子是: -

Some text here before any delimiter 
---------- 
Line 1 
Line 2 
Line 3 
Line 4 
---------- 
Line 1 
Line 2 
Line 3 
Line 4 
---------- 
Some text here after last delimiter 

而且我想获得

Line 1 
Line 2 
Line 3 
Line 4 


Line 1 
Line 2 
Line 3 
Line 4 

/我如何做到这一点使用awk与sed的正则表达式?谢谢。

+0

当然你不是指'sed'/^- * $/d'' – 2012-07-07 05:06:06

+0

可以哟你澄清“之前和之后的分隔符”? – 2012-07-07 05:07:09

+0

删除到第一个分隔符,并从最后一个分隔符到结尾,并将其中的任何分隔符变成随机数量的换行符? – tripleee 2012-07-07 06:51:01

回答

3

你可以试试这个。

文件:a.awk:

BEGIN { RS = "-+" } 

{ 
    if (NR > 1 && RT != "") 
    { 
     print $0  
    } 
} 

运行:AWK -f a.awk DATA_FILE

0

如果你可以舒适地贴合整个文件到内存中,如果Perl是可以接受的,而不是AWK或sed的,

perl -0777 -pe 's/\A.*?\n-{10}\n//s; 
    s/(.*\n)-{10}\n.*?\Z/\1/s; 
    s/\n-{10}\n/\n\n\n/g' file >newfile 

这里主要的常见问题是-0777选项(啜食模式)和/s(点匹配换行符)正则表达式标志。

0

这可能会为你工作:

sed '1,/^--*$/d;:a;$!{/\(^\|\n\)--*$/!N;//!ba;s///p};d' file