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 with regexでこれを行うにはどうすればよいですか?ありがとう。

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

ファイル全体をメモリに快適に収めることができ、awkやsedの代わりにPerlが受け入れられる場合は、

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

ここでの主なFAQは、-0777オプション(スラップモード)と/s(ドットが改行に一致する)正規表現フラグです。

于 2012-07-07T07:45:34.147 に答える
0

これはあなたのために働くかもしれません:

sed '1,/^--*$/d;:a;$!{/\(^\|\n\)--*$/!N;//!ba;s///p};d' file
于 2012-07-07T09:11:02.853 に答える