Como substituir uma linha em um arquivo xml por um conjunto de linhas armazenadas em uma variável ou arquivo usando comandos unix?

1

Eu tenho um arquivo xml

em que a linha que precisa ser pesquisada é:

SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'

Esse valor pesquisado precisa ser substituído pelo valor da variável a seguir ou também pode ser armazenado em outro arquivo:

REPLACE='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>
'

Como isso pode ser feito usando comandos unix como SED ou AWK? (Aqui SEARCH precisa ser substituído por REPLACE.

    
por tejasw 07.07.2014 / 11:33

2 respostas

0

Sim, isso poderia ser feito com sed, mas eu concordo com Jens. Eu recomendaria usar uma ferramenta adequada como a biblioteca python + lxml para pesquisar e substituir suas tags.

    
por 09.07.2014 / 04:47
0

Tanto quanto eu posso ver os personagens a serem escapados:

awk '/<\?xml version="1.0" encoding="UTF-8" standalone="no"\?><SSC>/ {print "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>"}' <<< '<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
  • no campo de pesquisa: você quer escapar do? caracteres por \?
  • no campo REPLACE: você quer escapar dos "caracteres de \"

Ou se você precisar usar variáveis, também escape "no campo SEARCH e escape os caracteres duas vezes, uma vez para ser armazenado em uma variável e duas vezes para ser repetido!

SEARCH_escaped='sed -e 's/\?/\\?/g' -e 's/\"/\\"/g' <<< $SEARCH'
REPLACE_escaped='sed 's/\"/\\"/g' <<< $REPLACE'

awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH
    
por 16.03.2016 / 16:40

Tags