
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