Hm... Seguindo a ideia de que uma linha vazia é igual a outra linha vazia...
[EMAIL PROTECTED] ~]# cat txt xxx:aaa,eee,bbb aaa:ddd adfa adfa [EMAIL PROTECTED] ~]# cat txt | uniq xxx:aaa,eee,bbb aaa:ddd adfa adfa [EMAIL PROTECTED] ~]# -- Flávio do Carmo Júnior On Dec 5, 2007 1:17 PM, [EMAIL PROTECTED] <[EMAIL PROTECTED]> 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 >