Um caminho:
cat -s file | sed 's/^$/---/'
Da página man do cat:
-s, --squeeze-blank
never more than one single blank line
Quando cat tiver espremido as linhas em branco, sed substituirá o espaço em branco por ---
A entrada de amostra é
1
2
3
4
5
6
7
8
9
A saída esperada é
1
2
3
---
4
5
---
6
7
8
---
9
Uma abordagem compatível com POSIX usando o recurso de registro de várias linhas do AWK (null RS):
awk 1 RS= ORS='\n---\n' file
Isso produz saída idêntica à saída desejada, exceto por uma linha "---" no final. Se essa discrepância for inaceitável, ela pode ser eliminada com um filtro sed:
... | sed '$d'