Flavio, resolvi o meu problema e estou postando o aqui De qq forma Obrigado
#!/bin/bash # criei um campo no final do arquivo chamado sep e completei com xxx # separo todo o arquivo dbf em linhas cujo ultimo campo = "xxx" sed 's/xxx/\n/g' prod.dbf > prod1.dbf # copio o cabecalho do dbf que tem 3 linhas para outro arquivo sed -n '1,3p' prod1.dbf > cab.dbf # deleto as 3 linhas do cabecalho sed '1,3d' prod1.dbf > corpo.dbf # faco a troca de 18.00 para 17.00 nas linhas que possuam o produto, (1 ICMS por linha) sed '/GIZ/s/18.00/17.00/g' -i corpo.dbf #junto todasd as linhas em uma so no novo corpo do dbf sed ':a;$!N;s/\n/xxx/;ta;' corpo.dbf > corpo1.dbf #junto o cabecalho do dbf com o corpo e resolvido o problema cat cab.dbf corpo1.dbf > final.dbf rm -f prod1.dbf rm -f cab.dbf rm -f corpo.dbf rm -f corpo1.dbf --- Em [email protected], "Flavio Junior" <[EMAIL PROTECTED]> escreveu > > 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 <[EMAIL PROTECTED]> 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 [email protected] <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 > > > > > > [EMAIL PROTECTED]:~$ 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 > > > > > > [EMAIL PROTECTED]:~$ 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 > > > > > > [EMAIL PROTECTED]:~$ > > > > > > 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 [email protected]<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 > > [email protected] <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: > > [email protected] <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] >
