Как заменить несколько пустых строк определенной непустой строкой?

Как заменить несколько пустых строк определенной непустой строкой?

Пример входных данных:

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

Подход, совместимый с POSIX, с использованием возможности многострочной записи AWK (нулевой RS):

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

Это дает вывод, идентичный желаемому, за исключением строки "---" в самом конце. Если это несоответствие неприемлемо, его можно устранить с помощью фильтра sed:

... | sed '$d'

Связанный контент