Modifica o valor no arquivo XML no Unix

0

eu preciso fazer algo com o arquivo Xml no Unix. Em particular, em 1 caminho eu tenho arquivos xml diferentes. Preciso cortar os primeiros 10 dígitos da tag tradeId de valor e colá-la nas tags de problema

<issuer issuerIdScheme="http://www.remove-234.org">549300ADFPIVCPUAAAA</issuer>

<tradeId tradeIdScheme="http://www.remove-234.org">1234567890ABCDEFGHILMN</tradeId>

Então, eu preciso ter este resultado:

<issuer issuerIdScheme="http://www.remove-234.org">1234567890</issuer>

e

<tradeId tradeIdScheme="http://www.remove-234.org">ABCDEFGHILMN</tradeId>

Muito obrigado pela ajuda!

    
por Massimiliano Mascoli 10.05.2016 / 11:22

1 resposta

0

Embora a manipulação de XML no nível de texto tenha seus problemas, isso pode ser bom o suficiente: Supondo que tenhamos um arquivo XML de

<something>
    <issuer issuerIdScheme="http://www.remove-234.org">549300ADFPIVCPUAAAA</issuer>
    <tradeId tradeIdScheme="http://www.remove-234.org">1234567890ABCDEFGHILMN</tradeId>
</somtehing>

em seguida, executando isso por meio de

grep -v '<issuer issuerIdScheme' | sed 's/<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\(..........\)\([^<]*\)<\/tradeId>/<issuer issuerIdScheme="http:\/\/www.remove-234.org"><\/issuer>\n\t<tradeId tradeIdScheme="http:\/\/www.remove-234.org"><\/tradeId>/'

criará uma saída de

<something>
    <issuer issuerIdScheme="http://www.remove-234.org">1234567890</issuer>
    <tradeId tradeIdScheme="http://www.remove-234.org">ABCDEFGHILMN</tradeId>
</somtehing>

EDITAR

Para um script que faz isso com todos os arquivos XML em uma pasta, tente

#!/bin/bash

FOLDER="/home/cg/root"

for X in "$FOLDER"/*.xml; do
  test -f "$X" || continue
  mv "$X" "$X.ori" || continue
  cat "$X.ori" | grep -v '<issuer issuerIdScheme' | sed 's/<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\(..........\)\([^<]*\)<\/tradeId>/<issuer issuerIdScheme="http:\/\/www.remove-234.org"><\/issuer>\n\t<tradeId tradeIdScheme="http:\/\/www.remove-234.org"><\/tradeId>/' > "$X"
done
    
por 10.05.2016 / 12:12

Tags