On Mon, Jun 15, 2009 at 08:53:47PM -0000, Cristiano Ferrari wrote: > --- Em shell-script@yahoogrupos.com.br, César Vianna <cesar.via...@...> > 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." ------------------------------