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

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

Re: [shell-script] Contador dentro do Sed


From: phfbettega
Subject: Re: [shell-script] Contador dentro do Sed
Date: Thu, 24 Aug 2017 21:25:50 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0

Uma solução com sed é inverter o for, assim não há números repetidos
no endereço do sed. Mas mistura shell e sed.

cat tiago-lista.txt
<det nItem="0">
a
<det nItem="1">
b
<det nItem="2">
c

for ((i=3;i>0;i--));do
sed -i '/<det nItem="'$((i-1))'">/ s/'$((i-1))'/'$i'/' tiago-lista.txt
done

cat tiago-lista.txt
<det nItem="1">
a
<det nItem="2">
b
<det nItem="3">
c

Pensei em algo assim mas não funcionou, acho que o sed
não lembra o incremento de uma linha para outra.
De qualquer maneira, a variável e o incremento são shell.

i=0;sed 's/'$i'/'$((++i))'/' <<<'linha 0
linha 1'
linha 1
linha 1

i=0;sed ':a;s/'$i'/'$((++i))'/;n;ba' <<<'linha 0
linha 1'
linha 1
linha 1

Abraços Paulo

On 24-08-2017 17:36, Tiago Tarifa address@hidden [shell-script] wrote:
Fala pessoal!
Estou com um arquivo xml de venda (CF-e) desses aparelhos que emitem cupom 
fiscais, os SAT.
O arquivo tem um campo nItem que numera os itens dentro dessa venda. O campo é assim: <det 
nItem="1">

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
done

Como podem ver esse código dá m....

Valeu

Tiago Tarifa Munhoz


--------------------------------------------------------------------------------------------------------------
Enviado por: Tiago Tarifa <address@hidden>
--------------------------------------------------------------------------------------------------------------


reply via email to

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