shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Editar um arquivo de uma linha com SED


From: Flavio Junior
Subject: Re: [shell-script] Re: Editar um arquivo de uma linha com SED
Date: Mon, 12 Mar 2007 13:17:57 -0300

Possivel é, viavel eu jah nao sei dizer..
Com awk voce poderia fazer o que ta dizendo, mas ao meu ver nao vale a pena.

Qual o problema de ter varios produtos? no caso ali o que mudaria seria de
giz pra outra coisa?
Imaginamos um arquivo com uma lista dos produtos:
giz verde
giz amarelo
giz
lapis
lapis preto
borracha
papel
papel timbrado

OIFS=$IFS
IFS='
'
while read produto; do
    sed -i "s/\($produto\ *\)18.00pc/\117.00pc/g" arquivo.dbf
done < lista.txt
IFS=$OIFS

Eu usei o -i do sed ai, isso vai alterar o arquivo diretamente sem gerar um
backup. Seria interessante fazer testes antes.

É bunita solucao? Eh nada.. vai passar o arquivo `wc -l lista.txt` vezes,
mas acho melhor do que o que vc tava pensando.
Como conseguir a lista de produtos? passa um pedaço do arquivo que voce tem
ai q nos tentamos ajudar.


Flavio do Carmo Junior

On 3/12/07, Marcos Gattermeyer <address@hidden> wrote:
>
>   Flavio,
>
> Tambem nao daria certo porque posso ter uma gama enorme de cores e
> protudos para fazer a substituicao.
>
> Havia pensado em ponteiramento na string por exemplo, faço uma
> primeira pesquisa procurando por "giz" ponteirando ai, e a partir dai
> faço uma segunda pesquisa com troca de 18.00 para 17.00 ponteirando
> novamente, faço nova pesquisa ..... assim por diante.
>
> Sera que e possivel ?
>
> Senao vou ter que criar um programinha so para isso em outra
> plataforma (arrepio)
>
> Obrigado
>
> Marcos
>
> --- Em address@hidden <shell-script%40yahoogrupos.com.br>,
> "Flavio Junior" <billpp@...>
> escreveu
> >
> > Com certeza..
> > Porem, se tratando de um arquivo .dbf (se nao me engano, ele eh
> reconhecido
> > como uma unica linha ne?)
> > um coringa poderia ser um problemao.
> >
> > Na verdade, acho que a opcao de teste poderia ser
> >
> > junior@babalu:~$ cat teste
> > 100 teste 18.00pc 20.00 101 giz amarelo 18.00pc 1.00 102 lapis 18.00pc
> > 102.00 100 teste 18.00pc 20.00 101 giz verde 18.00pc 1.00 102 lapis
> 18.00pc
> > 102.00 100 teste 18.00pc 20.00 101 giz azul 18.00pc 1.00 102 lapis
> 18.00pc
> > 102.00 100 teste 18.00pc 20.00 101 giz 18.00pc 1.00 102 lapis
> 18.00pc 102.00
> >
> > junior@babalu:~$ sed 's/giz\ \(\(verde\|azul\|amarelo\|cores\)\ \)\?\ *
> > 18.00pc/giz \117.00pc/g' teste
> > 100 teste 18.00pc 20.00 101 giz amarelo 17.00pc 1.00 102 lapis 18.00pc
> > 102.00 100 teste 18.00pc 20.00 101 giz verde 17.00pc 1.00 102 lapis
> 18.00pc
> > 102.00 100 teste 18.00pc 20.00 101 giz azul 17.00pc 1.00 102 lapis
> 18.00pc
> > 102.00 100 teste 18.00pc 20.00 101 giz 17.00pc 1.00 102 lapis
> 18.00pc 102.00
> >
> > junior@babalu:~$
> >
> > Presta atenção no sed que eu optei por usar todas as cores possiveis na
> > string do grupo... voce pode usar algo como [a-z]+ ... mas pensando
> em um
> > arquivo .dbf, cuidado com a estrutura. Tem mto lixo nessas coisas.
> >
> > Tenta entender a regex tambem, tentei manter o numero de espaços
> identicos
> > pra evitar problemas.
> >
> >
> > Flavio do Carmo Junior
> >
> >
> >
> > On 3/12/07, Marcos Gattermeyer <mgatter@...> wrote:
> > >
> > > Bom dia Flavio,
> > >
> > > Nao daria certo porque posso ter "giz verde pc" ou giz azul pc",
> > > realmente preciso pesquisar a string "giz" e a partir dai pesquisar o
> > > ICMS "18.00" e substituir, depois continuar a pesquisa pois posso ter
> > > mais de um "giz" na tabela para substituir o ICMS.
> > >
> > > Pensei na sua solucao em usar um coringa entre o "giz" e o ICMS, daria
> > > para fazer isso?
> > >
> > > Obrigado
> > >
> > > Marcos
> > >
> > > --- Em address@hidden<shell-script%40yahoogrupos.com.br>
> <shell-script%40yahoogrupos.com.br>,
> > > "Flavio Junior" <billpp@>
> > > escreveu
> > > >
> > > > Um simples:
> > > >
> > > > $ sed 's/giz 18.00pc/giz 17.00pc/g' arquivo.dbf
> > > >
> > > > nao resolve ?
> > > >
> > > >
> > > > Flavio do Carmo Junior
> > > >
> > > > On 3/12/07, Marcos Gattermeyer <mgatter@> wrote:
> > > > >
> > > > > Entao Bruno,
> > > > >
> > > > > Dessa forma altero todos os ICMS de 18.00 para 17.00, Gostaria de
> > > > > alterara somente o ICMS que estiver entre a palavra "giz" e a
> proxima
> > > > > palavra "pc".
> > > > >
> > > > > De qualquer forma obrigado,
> > > > >
> > > > > se alguem tiver mais alguma dica agradeco ?
> > > > >
> > > > > --- Em
> address@hidden <shell-script%40yahoogrupos.com.br>
> <shell-script%40yahoogrupos.com.br>
> > > <shell-script%40yahoogrupos.com.br>,
> > > > > "Bruno Gunter Fricke"
> > > > > <gunter@> escreveu
> > > > > >
> > > > > >
> > > > > > Marcos, seria algo como:
> > > > > >
> > > > > > $ sed -e "s/$18.oo/$17.oo/g" dbf
> > > > > >
> > > > > >
> > > > > > ----- Original Message -----
> > > > > > From: Marcos Gattermeyer
> > > > > > To:
> address@hidden <shell-script%40yahoogrupos.com.br>
> <shell-script%40yahoogrupos.com.br>
> > > <shell-script%40yahoogrupos.com.br>
> > > > > > Sent: Friday, March 09, 2007 2:17 PM
> > > > > > Subject: [shell-script] Editar um arquivo de uma linha com SED
> > > > > >
> > > > > >
> > > > > > Boa Tarde,
> > > > > > A sequencia abaixo se trata de um arquivo DBF, com 5 campos
> > > > > > COD
> > > > > > PRODUTO
> > > > > > ICMS
> > > > > > TIPO
> > > > > > VALOR
> > > > > >
> > > > > > k Â&CODC
> > > > > > PRODUTOC
> > > > > > ICMSNTIPOCVALORN
> > > > > > 100 teste 18.00pc 20.00 101 giz 18.00pc
> > > > > > 1.00 102 lapis 18.00pc 102.00
> > > > > >
> > > > > > Todo o DBF e considerado como uma unica linha, sendo assim
> > > gostaria de
> > > > > > pesquisar e trocar somente a sequencia ICMS de "18.00" para
> "17.00"
> > > > > > que vem apos a palavra "giz", e mantenha o resto intacto.
> > > > > >
> > > > > > tentei:
> > > > > >
> > > > > > sed ':a;s/^\([^giz]*,[^pc]\+\)18.00/\117.00/;ta' -i arquivo.dbf
> > > > > >
> > > > > > (peguei este exemplo na internet)
> > > > > >
> > > > > > Mas nao funcionou.
> > > > > >
> > > > > > Se alguem puder me ajudar, agradeço
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > [As partes desta mensagem que não continham texto foram
> removidas]
> > > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > [As partes desta mensagem que não continham texto foram removidas]
> > > >
> > >
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]