17 votos

Edite el archivo xml usando el script / comando de shell

Necesito hacer esto usando un script o comando Unix Hay un archivo xml en / home / user / app / xmlfiles como

 <book>
   <fiction type='a'>
      <author type=''></author>
   </fiction>
   <fiction type='b'>
      <author type=''></author>
   </fiction>
   <Romance>
       <author type=''></author>
   </Romance>
</book>

Quiero editar el tipo de autor en ficción como local.

    <fiction>
      <author type='Local'></author>
   </fiction>

Necesito cambiar el tipo de autor que está en la etiqueta de ficción con el atributo b solo. Por favor, ayúdeme con esto usando un script o comando de shell de Unix. Gracias !

26voto

chaos Puntos 2703

Si solo desea reemplazar <author type=''><\/author> con <author type='Local'><\/author> , puede usar ese comando sed

 sed "/<fiction type='a'>/,/<\/fiction>/ s/<author type=''><\/author>/<author type='Local'><\/author>/g;" file

Pero, cuando se trata de xml, recomiendo un analizador / editor xml como xmlstarlet :

 $ xmlstarlet ed -u /book/*/author[@type]/@type -v "Local"  file
<?xml version="1.0"?>
<book>
  <fiction>
    <author type="Local"/>
  </fiction>
  <Romance>
    <author type="Local"/>
  </Romance>
</book>

Utilice el -L para editar el archivo en línea, en lugar de imprimir los cambios.

10voto

Kit Puntos 91
xmlstarlet edit --update "/book/fiction[@type='b']/author/@type" --value "Local" book.xml

2voto

Marki555 Puntos 343

Es bastante fácil con sed . La siguiente secuencia de comandos cambiará el contenido del archivo a.xml y colocará el original en a.bak como copia de seguridad.

Lo que hace es buscar en cada archivo la cadena <author type=''> y la reemplaza con <author type='Local'> . El /g significa que intentará hacer más de 1 reemplazo en cada línea si es posible (no es necesario para su archivo de ejemplo).

 sed -i.bak "s/<author type=''>/<author type='Local'>/g" a.xml

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: