Como substituir várias linhas em branco por uma linha específica não em branco?

Como substituir várias linhas em branco por uma linha específica não em branco?

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

Responder1

Mão Única:

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

Da página de manual do gato:

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

Depois catde comprimir as linhas em branco, sedsubstitua o espaço em branco por um---

Responder2

Uma abordagem compatível com POSIX usando o recurso de registro multilinha do AWK (RS nulo):

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

Isso produz uma saída idêntica à saída desejada, exceto por uma linha "---" no final. Se essa discrepância for inaceitável, ela poderá ser eliminada com um filtro sed:

... | sed '$d'

informação relacionada