Como substituir múltiplas linhas em branco por uma linha não vazia específica?

3

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
    
por nickm 11.02.2016 / 14:13

2 respostas

7

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 ---

    
por 11.02.2016 / 14:26
4

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'
    
por 11.02.2016 / 16:04

Tags