[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Substituir várias linhas em branco por uma linha em branco
From: |
address@hidden |
Subject: |
Substituir várias linhas em branco por uma linha em branco |
Date: |
Wed, 05 Dec 2007 13:17:30 -0200 |
User-agent: |
Thunderbird 2.0.0.6 (X11/20070728) |
Olá pessoal,
A algum tempo que vinha tentando encontrar alguma forma, menos
deselegante possível, de substituir várias linhas em branco em
seqüência, por apenas uma linha em branco. Por exemplo:
$ cat teste.txt
1111
2222
33333
445
56
$ _
deve ficar assim:
$ cat teste-new.txt
1111
2222
33333
445
56
$ _
Fiz isto com a linha
$ sed ':i ; $! N; s/\n/N/ ; t i ; s/N\{3,\}/NN/g ; s/N/\n/g' test.txt
Para um texto qualquer é conveniente substituir o "N" por algum caracter
como "µ", "Ø", ou algum caracter não existente no texto.
Como não encontrei outras soluções na rede, resolvi expor aqui a idéia.
Explicação:
O sed está dividido em três comandos.
1 :i ; $! N; s/\n/N/; t i => faz um laço no texto e substitui todas
alimentações de linha (\n) pelo caracter "N"
2 s/N\{3,\}/NN/g => substitui todas as ocorrências de três N's
(N{3,}) ou mais, por dois N (uma linha em branco)
3 s/N/\n/g => substitui os Ns por alimentação de linha (\n)
Se alguém tem alguma outra solução mais ou menos elegante para isto?
awk, outro sed, combinações diferentes de comandos...
Até,
Alves