[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Substituir várias linhas em branco por uma linha em b
From: |
Flavio Junior |
Subject: |
Re: [shell-script] Substituir várias linhas em branco por uma linha em branco |
Date: |
Wed, 5 Dec 2007 14:35:25 -0200 |
Hm... Seguindo a ideia de que uma linha vazia é igual a outra linha vazia...
[root@bloo ~]# cat txt
xxx:aaa,eee,bbb
aaa:ddd
adfa
adfa
[root@bloo ~]# cat txt | uniq
xxx:aaa,eee,bbb
aaa:ddd
adfa
adfa
[root@bloo ~]#
--
Flávio do Carmo Júnior
On Dec 5, 2007 1:17 PM, address@hidden <address@hidden> wrote:
>
>
>
>
>
>
> 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
>