Curti d+ a solução do Fernando. Muito Bom!! Aproveitando a dica do Julio + o script do Fernando:
Você pode obter uma das suas n saídas individualmente através dos índices do sed: echo $a | sed -e 's/#[^#]#/1' -e 's/#//g' #1 ou nada ;) * de script. Teste de script2. Ultimo teste de script3. echo $a | sed -e 's/#[^#]#/2' -e 's/#//g' Teste de *. Teste de script2. Ultimo teste de script3. echo $a | sed -e 's/#[^#]#/5' -e 's/#//g' Teste de script. Teste de script2. Ultimo teste de *. t+ --- Em [email protected], "mikoazul" <zaq.t...@...> escreveu > > Dae Fernandão! > > Os feras do sed também estão aqui! =) > > Muito obrigado parceiro! Que solução elegante a sua. =) > > Vou substituir minha solução Lusitana por ela. > > Show de bola! Valeu mesmo. > > []s > Zaq > > --- Em [email protected], Fernando Luizao <fernando_orse@> > escreveu > > > > 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.tech@> escreveu: > > > > De: mikoazul <zaq.tech@> > > Assunto: [shell-script] Re: Alteração de campos individualmente. > > Para: [email protected] > > 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.tech@ .> escreveu: > > > > > > > > > > De: mikoazul <zaq.tech@ .> > > > > > 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] > > >
