![Como substituir uma linha em um arquivo xml por um conjunto de linhas armazenadas em uma variável ou arquivo usando comandos unix?](https://rvso.com/image/1414653/Como%20substituir%20uma%20linha%20em%20um%20arquivo%20xml%20por%20um%20conjunto%20de%20linhas%20armazenadas%20em%20uma%20vari%C3%A1vel%20ou%20arquivo%20usando%20comandos%20unix%3F.png)
Eu tenho um arquivo xml
em que a linha que precisa ser pesquisada é:
SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
Este valor pesquisado precisa ser substituído pelo valor da seguinte variável 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.
Responder1
Sim, isso poderia ser feito com sed, mas concordo com Jens. Eu recomendaria usar uma ferramenta adequada como a biblioteca python + lxml para pesquisar e substituir suas tags.
Responder2
Tanto quanto 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 PESQUISAR: você deseja escapar do ? caracteres por \?
- no campo REPLACE: você deseja escapar dos "caracteres por\"
Ou se precisar usar variáveis, escape também " no campo SEARCH e escape os caracteres duas vezes, uma para serem armazenados em uma variável e duas vezes para serem ecoados!
SEARCH_escaped=`sed -e 's/\?/\\\?/g' -e 's/\"/\\\"/g' <<< $SEARCH`
REPLACE_escaped=`sed 's/\"/\\\"/g' <<< $REPLACE`
awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH