Como substituir números em um arquivo XML com seu valor duplo?

1

Arquivo de entrada "input.xml":

<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>

Eu quero que todos os valores numéricos sejam multiplicados por 2:

<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>

Como fazer isso?

    
por snoop 16.10.2015 / 15:52

2 respostas

2

Em geral, você não deve analisar HTML / XML usando expressões regulares .

No entanto, se o arquivo de entrada for realmente semelhante ao mostrado no exemplo (uma única tag de abertura e fechamento em cada linha e nenhum caractere > antes do final da tag de abertura), usando Perl:

perl -pe 's/>([0-9]+)/">".*2/e' in
  • s : afirma para executar uma substituição
  • / : inicia o padrão
  • > : corresponde a um caractere >
  • ([0-9]+) : corresponde e agrupa um ou mais dígitos
  • / : interrompe o padrão / inicia a sequência de substituição
  • ">".*2 : expression; concatenação de duas cadeias, um caractere > e o primeiro grupo capturado multiplicado por 2
  • / : interrompe a sequência de substituição / inicia os sinalizadores de padrão
  • e : afirma para avaliar a string de substituição
% cat in
<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>
% perl -pe 's/>([0-9]+)/">".*2/e' in
<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>
    
por kos 16.10.2015 / 16:18
3

Use um analisador XML adequado. Por exemplo, em xsh , você pode escrever

open input.xml ;
for //text if (. > 0) set . (2 * .) ;
save :b ;
    
por choroba 16.10.2015 / 16:02