4

ファイル内の空のセグメントをすべて削除したいと考えています。

START空のセグメントは、 で始まり で終わる連続した行のペアによって指定できますEND。有効なセグメントには、START で始まり END で終わる行の間にいくつかのコンテンツがあります

サンプル入力

Header

START arguments
END

Any contents

START arguments
...
something
...
END

Footer

望ましい出力

Header


Any contents

START arguments
...
something
...
END

Footer

ここで、可能なワンライナーを探しています。どんな助けでも大歓迎です。

試練

フォローしてみawkました。ある程度は機能しますが、有効なセグメントであっても START 行を削除します。

awk '/^START/ && getline && /^END$/ {next} 1' file
4

6 に答える 6

2

のみ

awk -v RS='START[^\n]*\nEND\n' '{printf "%s", $0}' file.txt
于 2013-11-12T20:10:11.127 に答える
1
/^START/ {
    startline=$0

    next
}

/^END$/ && startline {
    startline=""
    next
}

startline {
    print startline
}

startline=""

1
于 2013-11-12T20:05:33.053 に答える
1
$ awk '{rec = rec $0 RS} END{ gsub(/START[^\n]*\nEND\n/,"",rec); printf "%s", rec }' file
Header


Any contents

START arguments
...
something
...
END

Footer
于 2013-11-12T21:19:56.880 に答える