Tengo un directorio lleno de archivos XML que se ven así, para los cuales quiero cambiar el valor del número del elemento "desplazamiento" de 1 a algún otro número.
$ cat my.xml
<offset xmlns="">1</offset>
Escribí varias combinaciones de este comando sed, pero nada de lo que probé se ejecuta sin errores. Estoy bastante seguro de que necesito escapar de algunos de los caracteres, pero los que he probado siempre terminan en errores ("token inesperado", "opción desconocida", etc.). También lo intenté sin el indicador -e, ya que en realidad no es una expresión.
sed -i -e s/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml
Cualquier ayuda sería apreciada.
Respuesta1
No es necesario usarlo /
en sed, puede usar una coma, por ejemplo:
sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE
Respuesta2
Prueba esto,
$ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file
<offset xmlns="">99</offset>
Utilice un delimitador sed diferente si la entrada contiene barras.
Respuesta3
Por lo general, no necesita todo eso en la s/earch/replace/
función en sí, sino que puede hacerlo primero /address/
y luego de forma condicional /s///
. No solo puede ayudar con la legibilidad y evitar algunos de los problemas que menciona, sino que también puede aumentar el rendimiento:
sed '/offset xmlns=/s/>1</>99</'
Respuesta4
Reemplazaría el carácter 17 de la línea, que contiene el valor:
sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml
Reemplace VALOR con el nuevo valor de <offset>
. P.ej.
sed -i 's/^\(.\{17\}\)./\18/' file.xml
para cambiarlo a 8.