2

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

一个例子是: -

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

4

3 回答 3

3

你可以试试这个。

文件:a.awk:

BEGIN { RS = "-+" } 

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

运行:awk -f a.awk data_file

于 2012-07-07T09:10:55.060 回答
0

这可能对您有用:

sed '1,/^--*$/d;:a;$!{/\(^\|\n\)--*$/!N;//!ba;s///p};d' file
于 2012-07-07T09:11:02.853 回答
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(点匹配换行符)正则表达式标志。

于 2012-07-07T07:45:34.147 回答