paulo1205
(usa Ubuntu)
Enviado em 13/03/2017 - 15:30h
Quando eu enviei a resposta anterior, estava no celular.
Agora, no micro, fiz vários testes com o
sed , em diferentes sistemas (Linux e AIX) e não consegui reproduzir o problema com tratamento de uma última linha na qual eventualmente falte a marca de fim de linha. Esse “problema” existe com alguns utilitários (como o
wc e o
gcc ), mas aparentemente não com o
sed (ao menos não com uma substituição simples, como a que você mostrou).
Não sei o que está acontecendo no seu caso. De todo modo, eu tentaria trocar o
sed por
perl , para ver o que acontece, ou trocando a linha
sed "s/$varValorAntigo/$varValorNovo/g" arquivo-tmp.xml >> vasportal_applications.xml
por
perl -pe "s/$varValorAntigo/$varValorNovo/g;" arquivo-tmp.xml >> vasportal_applications.xml
ou reescrevendo todo o script em Perl, como mostrado abaixo.
#!/usr/bin/perl
use POSIX;
$origfile="vasportal_applications.xml";\
$date=strftime("%Y%m%d%H%M%S", localtime(time()));
$backupfile="$origfile.old_$date";
$tempfile="arquivo-tmp.xml";
system("cp", "-p", $origfile, $backupfile);
system("cp", "-p", $progfile, $tempfile);
#if(open(ORIG, "<", $origfile){ while(<ORIG>){ if(/soasuitefqa:10020/){ $verificaApontamento++; } } close(ORIG);
if($#ARGV<1 || ($valorAntigo=$ARGV[0]) eq "" || ($valorNovo=$ARGV[1]) eq ""){
print STDERR <<EndOfMessage;
Necessário colocar o valor antigo e o valor novo.
Exemplo:
$0 10020 20020
EndOfMessage
exit(1);
}
die("Não foi possível abrir arquivo temporário: $!.\n") unless open(TEMP, "<", $tempfile);
die("Não foi possível abrir arquivo a ser alterado: $!.\n") unless open(ORIG, ">>", $origfile);
while(<TEMP>){
sed s/$valorAntigo/$valorNovo/g;
die("Não foi possível escrever no arquivo: $!.\n"; unless print ORIG $_;
}
close(ORIG);
close(TEMP);
#unlink($tempfile);
NOTA: Tem certeza de que você realmente quer ACRESCENTAR o conteúdo modificado ao final do arquivo original? Faria mais sentido, em geral, SUBSTITUIR o conteúdo original pelo modificado. Mas eu não alterei esse comportamento, que já estava no seu script original.