![¿Cómo reemplazar una línea en un archivo xml con un conjunto de líneas almacenadas en una variable o archivo usando comandos Unix?](https://rvso.com/image/1414653/%C2%BFC%C3%B3mo%20reemplazar%20una%20l%C3%ADnea%20en%20un%20archivo%20xml%20con%20un%20conjunto%20de%20l%C3%ADneas%20almacenadas%20en%20una%20variable%20o%20archivo%20usando%20comandos%20Unix%3F.png)
tengo un archivo xml
en el cual la línea que se debe buscar es:
SEARCH='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC>'
Este valor buscado debe reemplazarse con el valor de la siguiente variable o también puede almacenarse en otro archivo:
REPLACE='<?xml version="1.0" encoding="UTF-8" standalone="no"?><SSC><ErrorContext><CompatibilityMode>0</CompatibilityMode><ErrorOutput>1</ErrorOutput>.......some more tags.....</MethodContext>
'
¿Cómo se puede hacer esto usando comandos Unix como SED o AWK? (Aquí BUSCAR debe reemplazarse por REEMPLAZAR.
Respuesta1
Sí, se podría hacer con sed, pero estoy de acuerdo con Jens. Recomendaría utilizar una herramienta adecuada como la biblioteca python + lxml para buscar y reemplazar sus etiquetas.
Respuesta2
Por lo que puedo ver, los personajes a los que se les debe escapar:
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>'
- en el campo BÚSQUEDA: ¿quieres escapar del? caracteres por \?
- en el campo REEMPLAZAR: desea escapar los "caracteres por \"
O si necesita usar variables, también escape " en el campo BÚSQUEDA y escape los caracteres dos veces, una para almacenarlos en una variable y dos veces para repetirlos.
SEARCH_escaped=`sed -e 's/\?/\\\?/g' -e 's/\"/\\\"/g' <<< $SEARCH`
REPLACE_escaped=`sed 's/\"/\\\"/g' <<< $REPLACE`
awk "/$SEARCH_escaped/ {print \"$REPLACE_escaped\"}" <<< $SEARCH