複数の空行を空でない特定の行に置き換える方法は?

複数の空行を空でない特定の行に置き換える方法は?

サンプル入力は

1
2
3


4
5



6
7
8



9

予想される出力は次のとおりです。

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

答え1

一方通行:

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

猫のマニュアルページから:

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

cat空行を絞った後、sedスペースを次のように置き換えます。---

答え2

AWKの複数行ロギング機能(空のRS)を使用するPOSIX準拠の方法:

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

末尾の「---」行を除外すると、目的と同じ出力が生成されます。この違いが許可されていない場合は、sedフィルタを使用して削除できます。

... | sed '$d'

関連情報