Fantástico Flavio! Grande idéia. Desde que não se tenho outro tipo qualquer de linha repetida.
$ uniq test.txt Isto foi bem limpo. Até Rudson R. Alves > 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] > <mailto:alves_list%40yahoo.com.br> <[EMAIL PROTECTED] > <mailto:alves_list%40yahoo.com.br>> 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 > > > >
