Acho que agora a saída está como vc quer: a='#Teste# de #script#. Teste de #script2#. #Ultimo# teste de #script3#'
while echo $a | grep '#' > /dev/null do echo $a | sed 's/#[^#]*#/*/; s/#//g' a=`echo $a | sed 's/#//; s/#//'` done Provavelmente dá pra simplificar os seds ;) Abraços --- Em seg, 18/1/10, mikoazul <zaq.t...@gmail.com> escreveu: De: mikoazul <zaq.t...@gmail.com> Assunto: [shell-script] Re: Alteração de campos individualmente. Para: shell-script@yahoogrupos.com.br Data: Segunda-feira, 18 de Janeiro de 2010, 18:26 Oi Fernando, Fiz o teste. Apenas a última linha casou: Teste de *. Teste de #script2#. #Ultimo# teste de #script3# Teste de script. Teste de *. #Ultimo# teste de #script3# Teste de script. Teste de script2. * teste de #script3# Teste de script. Teste de script2. Ultimo teste de * De qualquer forma muito obrigado pelo seu tempo e disposição. Assim que eu tiver a solução eu posto aqui. []s --- Em shell-script@ yahoogrupos. com.br, Fernando Luizao <fernando_orse@ ...> escreveu > > Algumas idéias: > > a='#Teste# de #script#. Teste de #script2#. #Ultimo# teste de #script3#' > > > Teste se a string contém '#', se não tiver, acabamos. Pode usar isso em um > laço: > > echo $a | grep '#' > > Substituindo a primeira ocorrência do que está entre '#' por '*' > > echo $a | sed 's/#[^#]*#/* /' > > Removendo as duas primeiras ocorrências do caracter '#' > > a=`echo $a | sed 's/#//1; s/#//1'` > > Juntando tudo isso acredito que resolva o problema =) > > Um esboço (não testado): > > while echo $a | grep '#' > /dev/null > do > echo $a | sed 's/#[^#]*#/* /' > a=`echo $a | sed 's/#//1; s/#//1'` > end > > Abraço > > --- Em seg, 18/1/10, mikoazul <zaq.t...@.. .> escreveu: > > De: mikoazul <zaq.t...@.. .> > Assunto: [shell-script] Alteração de campos individualmente. > Para: shell-script@ yahoogrupos. com.br > Data: Segunda-feira, 18 de Janeiro de 2010, 14:36 > > > > > > > > > > > > > > > > > > Pessoal, > > > > Tive que recorrer à lista pois meu caso está bem complicado (pelo menos pra > mim). Já tentei alguns comandos sed e outros awk, mas não consigo resolver o > impasse. > > > > Estou tentando transformar o arquivo "ENTRADA" nas várias saídas demonstradas > abaixo. > > > > A idéia é ir pegando cada campo entre "#" e substituí-lo com * (por exemplo). > O detalhe é que em cada linha tem-se um resultado diferente. Ou seja, ele vai > tratando o próximo campo e automaticamente "destratando" o anterior. Ou seja > a idéia é tratar um campo por vez. > > > > Se tiver alguém inspirado hoje e que puder me ajudar eu agradeço desde já. > > > > Vamos aos detalhes: > > > > Entrada: > > #Teste# de #script#. Teste de #script2#. #Ultimo# teste de #script3#. > > > > Saidas: > > * de script. Teste de script2. Ultimo teste de script3. > > Teste de *. Teste de script2. Ultimo teste de script3. > > Teste de script. Teste de *. Ultimo teste de script3. > > Teste de script. Teste de script2. * teste de script3. > > Teste de script. Teste de script2. Ultimo teste de *. > > > > Tentei com o sed e o máximo que consegui foi: > > > > cat ENTRADA | sed 's/^\(\([^#] *#\)\{1,2\ }\)0*/*/' > > > > Saída: > > * de #script#. Teste de #script2#. #Ultimo# teste de #script3#. > > > > Grato desde já. > > > > > > > > > > > > > > > > > > > > > > > > ____________ _________ _________ _________ _________ _________ _ > Veja quais são os assuntos do momento no Yahoo! +Buscados > http://br.maisbusca dos.yahoo. com > > [As partes desta mensagem que não continham texto foram removidas] > ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]