Como substituir todas as ocorrências em um arquivo com valor exclusivo para cada ocorrência

2

Estou tendo um arquivo xml com várias ocorrências MyID, conforme mostrado abaixo.

MyID="dett090900990000"

Eu quero substituir todas as ocorrências do valor MyID="" pelo valor exclusivo.

Por exemplo se eu tiver três ocorrências de MyID="" em um arquivo xml, quando eu estiver executando o script, passarei um argumento que será usado como valor MyID (mas o valor incremental será atribuído a cada ocorrência).

i.e. quando eu vou rodar meu script como myscript.sh 7777777878889888

A saída deve ser como abaixo (isso significa que todo o valor de MyID será alterado e agora terá valores exclusivos). Pode ser qualquer coisa (número, string e misto).

MyID="77777778788898881" %código% MyID="77777778788898882"

Como você pode ver, 1, 2 & 3 será anexado ao valor fornecido.

Estou procurando um comando simples para resolver este problema! Obrigada!

    
por OverrockSTAR 05.06.2017 / 04:01

2 respostas

4

Em Perl isso pode ser feito assim:

perl -pe 'BEGIN { $v=shift; }
          s/(MyID=")[^"]*(")/$1.$v.++$t.$2/ge' 7777777878889888 foo.xml bar.xml
    
por 05.06.2017 / 15:03
1

Não é exatamente simples, mas funciona. O script usa dois argumentos, Arg1 é a string a ser correspondida, Arg2 é o nome do arquivo de entrada. Esta solução usa awk em vez de sed.

#!/bin/bash
# myscript.sh
# Usage myscript.sh <string to match> <filename>

MyID=$1

awk -v MyID=$MyID 'BEGIN{ mynum=1; } { if (match($0,MyID) ) { sub(MyID, sprintf("%s%d", MyID, mynum) ) mynum++; } print }' $2
    
por 05.06.2017 / 09:34

Tags