On Mon, Jan 18, 2010 at 07:32:06PM -0000, mikoazul wrote: > > > Oi Waldirio, > > A idéia é aquela mesma que eu postei originalmente. > > Não quero substituir todos os # por *. A idéia é a partir de uma linha de > entrada eu gere n linhas de saída. > > Tudo baseado no texto entre "#" (#texto_que_eu_quero_substituir#). > > Para cada texto encontrado eu quero tratá-lo e ignorar o restante e ir > fazendo na sequencia cada um. Ou seja ir encontrando cada texto entre "#". > > Se uma linha tiver n textos entre "#" então o resultado será "n" linhas > tratadas. Entendeu? Sendo que o texto de entrada só poderá ter no máximo 9 > textos entre "#" (justamente a quantidade de retrovisores que o sed pode > utilizar).
seu problema estava muito nebuloso até agora para mim, você pode assumir uma solução com awk, por exemplo: $ awk -F'#' '{OFS="";line=$0; for(i=2;i<NF;i+=2){ $i=" * "; print $0; $0=line};}' arquivo que nada mais é do que uma lógica simples usando looping. > > Talvez seja um assunto pra ser tratado na sed-br. pode ser, mas em sed creio que fique algumas vezes mais complexo: #!/usr/bin/sed :loop; # defino um LABEL de nome "loop" /#[^#]*#/ { # "enquanto" tiver campo faça ... h; # copia o pattern space no hold space s//*/; # susbtitua o campo por s/#//g; # remova todos os "#" do patter space p; # imprima o patter space g; # o inverso do "h" s/#//; # "descaracterize" - s/#//; # o primeiro campo b loop; # retorne para "loop" } d; # deleta o pattern space > > []s as 2 soluções são independentes da quantidade de "campos" que sua linha irá tem. -- "Não manejo bem as palavras Mas manipulo bem as strings." ------------------------------