[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Alteração de campos individualmente.
From: |
jimmy |
Subject: |
Re: [shell-script] Re: Alteração de campos individualmente. |
Date: |
Tue, 19 Jan 2010 08:40:03 -0200 |
User-agent: |
Mutt/1.4.2.3i |
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."
------------------------------
Re: [shell-script] Alteração de campos individualmente., Fernando Luizao, 2010/01/18