shell-script-pt
[Top][All Lists]
Advanced

[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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]