私が望むのは、特定の一致または一致自体の後の空白行をすべて削除することです。
ソースファイル:
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...