Em Perl isso pode ser feito assim:
perl -pe 'BEGIN { $v=shift; }
s/(MyID=")[^"]*(")/$1.$v.++$t.$2/ge' 7777777878889888 foo.xml bar.xml
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!
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