複数の空白行を特定の非空白行に置き換えるにはどうすればよいでしょうか?

複数の空白行を特定の非空白行に置き換えるにはどうすればよいでしょうか?

サンプル入力は

1
2
3


4
5



6
7
8



9

期待される出力は

1
2
3
---
4
5
---
6
7
8
---
9

答え1

一方通行:

cat -s file | sed 's/^$/---/'

cat のマニュアルページより:

   -s, --squeeze-blank
          never more than one single blank line

cat空白行を圧縮したら、空白sed---

答え2

AWK の複数行レコード機能 (null RS) を使用した POSIX 準拠のアプローチ:

awk 1 RS= ORS='\n---\n' file

これにより、最後の「---」行を除いて、希望の出力と同一の出力が生成されます。この不一致が許容できない場合は、sed フィルターを使用して除去できます。

... | sed '$d'

関連情報