特定の一致後に空白行をすべて削除する方法

特定の一致後に空白行をすべて削除する方法

私が望むのは、特定の一致または一致自体の後の空白行をすべて削除することです。

ソースファイル:

 line 1
 random words

 [GROUP 1]
 example 1
 example 2
 example 3

 [TITLE]


 [TITLE 2]
 line 2
 line 3

 [GROUP 2]

 random text...

望ましい結果:

 line 1
 random words

 [GROUP 1]
 example 1
 example 2
 example 3

 [TITLE 2]
 line 2
 line 3

 random text...

答え1

シンプルsed解決策:

sed -z 's/\[[^]]*\]\n\n\n*//g' file
  • -z- 入力を改行文字の代わりにゼロバイト(ASCII "NUL"文字)で終わる行セットとして扱います。

またはもっと複雑ですアッ解決策:

awk '/\[.+\]/{ r=$0; rn=NR; c=0; next }rn && NR-rn==++c{ 
         if(NF) { if(NR-ern!=1) print r; rn=0 } else { ern=NR; next } 
    }1' file

出力:

line 1
random words

[GROUP 1]
example 1
example 2
example 3

[TITLE 2]
line 2
line 3

random text...

関連情報