[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Remover quebra de linha
From: |
jimmy |
Subject: |
Re: [shell-script] Re: Remover quebra de linha |
Date: |
Mon, 15 Jun 2009 18:18:58 -0300 |
User-agent: |
Mutt/1.4.2.3i |
On Mon, Jun 15, 2009 at 08:53:47PM -0000, Cristiano Ferrari wrote:
> --- Em address@hidden, César Vianna <cesar.vianna@...> escreveu
> >
> > Opa! Valeu, Cristiano. Funcionou perfeitamente.
> >
> > Só não entendi a expressão que remove as quebras. O que é a expressão
> > :a;$!N; ? e o ta ?
> >
> > sed ':a;$!N;s/\n/ /g;ta; s/ID§/\nID§/g'
>
> O comando ':' define uma marcação (no caso, marcação chamada 'a'). O comando
> 't' é um pulo condicional, que pula até uma marcação se o último s///
> funcionou. Poranto, 'ta' pula até a marcação 'a' definida no primeiro
> comando, se o 's/\n/ /g' funcionou.
>
> Agora não me pergunte o porque do '$!N', eu também não entendo.
>
> Retirei esta dica do site do Aurélio
> (http://www.aurelio.net/sed/sed-HOWTO/sed-HOWTO-7.html) faz um bom tempo e
> nunca compreendi totalmente sua lógica. Alguém da lista pode explicar?
> ------------------------------------
podemos tentar,
$!N = na última linha não apensar com a próxima;
quanto ao código:
sed ':a;$!N;s/\n/ /g;ta; s/ID§/\nID§/g'
pelo menos nos meus testes é bem mais lento que fazer:
tr '\n' ' ' < arquivo | sed 's/ID§/\nID§/g'
uma alternativa seria usar:
sed '1{h;d};/^ID§/{x;s/\n/ /g;p;g;d};H;d' arquivo
a complexidade aumenta bastante, mas nesse caso a performace é
equivalente ao exemplo com o tr.
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------