使用sed / awk在水平分隔符之间获取多行文本

时间:2012-07-07 04:58:28

标签: 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执行此操作?感谢。

3 个答案:

答案 0 :(得分:3)

你可以试试这个。

  

文件:a.awk:

BEGIN { RS = "-+" } 

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

运行:awk -f a.awk data_file

答案 1 :(得分: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选项(slurp模式)和/s(点匹配换行符)正则表达式标志。

答案 2 :(得分:0)

这可能对您有用:

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