|
From: | Julio C. Neves |
Subject: | Re: [shell-script] Contador dentro do Sed |
Date: | Fri, 25 Aug 2017 11:57:52 -0300 |
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
Olasó pude responder o email agora. quando eu vi a primeira tentativa eu percebi de cara 2 erros.o principal é que se vc faz o for partindo de 0 ( ou 1 ) e ir incrementando, vc cai uma situação indefinida logo no segundo passo.por exemplo, se vc começa com i = 0 vc faztroca nItem="0" por nItem="1"e agora vc tem 2 nItem="1" e o segundo passo vai ser confuso. o phfbettega respondeu corretamenteAgora sobre a solução, vc pode usar shell pra criar um script sed - imagine este arquivobash$ cat teste.xml<det nItem="0"><det nItem="1"><det nItem="2"><det nItem="3"><det nItem="4"><det nItem="5"><det nItem="6"><det nItem="7"><det nItem="8"><det nItem="9">vamos gerar um sed q mude o 9 para 10, o 8 para 9 .. até o 0 virar 1 -- como vc precisabash$ for i in `seq 10 -1 1`; doj=$[ $i - 1 ] ;echo "s/nItem=\"$j\"/nItem=\"$i\"/" ;dones/nItem="9"/nItem="10"/s/nItem="8"/nItem="9"/s/nItem="7"/nItem="8"/s/nItem="6"/nItem="7"/s/nItem="5"/nItem="6"/s/nItem="4"/nItem="5"/s/nItem="3"/nItem="4"/s/nItem="2"/nItem="3"/s/nItem="1"/nItem="2"/s/nItem="0"/nItem="1"/agora vamos salvar isso em um arquivobash$ for i in `seq 10 -1 1`; do j=$[ $i - 1 ] ; echo "s/nItem=\"$j\"/nItem=\"$i\"/" ; done > change.sede vamos aplicar no seu xml, salvando um backupbash$ sed -i.old -f change.sed teste.xmlveja as alterações -- agora só falta adaptar para 300bash$ cat teste.xml<det nItem="1"><det nItem="2"><det nItem="3"><det nItem="4"><det nItem="5"><det nItem="6"><det nItem="7"><det nItem="8"><det nItem="9"><det nItem="10">enquanto o arquivo original foi preservado. se vc não precisa vc pode usar sed -i apenas, sem o .oldbash$ cat teste.xml.old<det nItem="0"><det nItem="1"><det nItem="2"><det nItem="3"><det nItem="4"><det nItem="5"><det nItem="6"><det nItem="7"><det nItem="8"><det nItem="9">2017-08-24 22:36 GMT+02:00 Tiago Tarifa address@hidden [shell-script] <address@hidden.br >:O arquivo tem um campo nItem que numera os itens dentro dessa venda. O campo é assim: <det nItem="1">Fala pessoal!Estou com um arquivo xml de venda (CF-e) desses aparelhos que emitem cupom fiscais, os SAT.Esse arquivo está com 300 itens começando do 0 até o 299:
<det nItem="0">
...
<det nItem="299">quando o correto seria:<det nItem="1">...<det nItem="300">Eu tentei, de uma forma inocente, fazer um for com um contador e chamar o sed para ir alterando esse campo mas não deu certo e ficou lento demais.Gostaria de saber como faço um contador dentro do Sed para ele ir alterando esses campos, sem precisar do Shell. (Ou se precisar, que ele não atrapalhe)Obs.: A titulo de curiosidade, o código que fiz e não deu certo foi este:for ((i=0;i<300;i++))
do
num=$((i+1))
sed -i 's/<det nItem="'"$i"'">/<det nItem="'"$num"'">/' 300produtos.xml
doneComo podem ver esse código dá m....ValeuTiago Tarifa Munhoz--
[Prev in Thread] Current Thread [Next in Thread]
- Contador dentro do Sed, Tiago Tarifa, 2017/08/24
- Re: [shell-script] Contador dentro do Sed, phfbettega, 2017/08/24
- Re: [shell-script] Contador dentro do Sed, phfbettega, 2017/08/24
- Re: Contador dentro do Sed, itamarnet, 2017/08/24
- Re: [shell-script] Contador dentro do Sed, Tiago Peczenyj, 2017/08/25
- Re: [shell-script] Contador dentro do Sed, Tiago Tarifa, 2017/08/25
- Re: [shell-script] Contador dentro do Sed, Tiago Peczenyj, 2017/08/25
- Re: [shell-script] Contador dentro do Sed, Julio C. Neves <=
- Prev by Date: Re: [shell-script] Contador dentro do Sed
- Next by Date: Re: [shell-script] Delay em background
- Previous by thread: Re: [shell-script] Contador dentro do Sed
- Next by thread: Delay em background
- Index(es):