2009-10-12 16 views
10

quiero editar el archivo de configuración de un programa que es un XML:escritura del golpe para editar el archivo XML

<software> 
    <settings> 
     ... 
     <setting name="local directory" type="string">/home/username/</setting> 
     ... 
    </settings> 
</software> 

Cuál es la manera más fácil de hacer esto desde un script bash?

Gracias

+3

Qué edición es lo que quiere hacer? – Mark

+0

la configuración llamada directorio local, su valor –

Respuesta

11

Dependiendo de lo que desee hacer, es posible que desee utilizar algunas herramientas específicas de XML (para manejar codificaciones de caracteres, para mantener la buena formación de XML, etc.). Puedes usar las herramientas normales orientadas a la línea, pero a menos que seas cuidadoso (o hagas algo trivial) puedes crear fácilmente un XML no conforme.

Utilizo el conjunto de líneas de comando XMLStarlet. Es un conjunto de utilidades de línea de comandos para analizar/manipular XML específicamente.

+1

+1 que me parece muy elegante. –

+0

+1 al comentario anterior para el uso de la palabra dandy. +1 a la publicación para una gran referencia. –

+0

XMLStarlet ... ¡buen consejo! –

-4

La mayoría de la gente probablemente usar sed de hacer la edición de línea de una escritura del golpe. Si realmente se preocupan por analizar el XML, entonces use algo como Perl, que tiene un analizador XML listo.

+0

Esto podría ser una forma de resolver el problema. Pero en ese caso intente agregar algunos códigos de muestra para eso. No dé oraciones vagas. –

-4

Un feo/insegura, pero a veces lo más fácil es llamar SED/Perl/awk de fiesta

+2

Sin embargo, debería leer esto primero: http://stackoverflow.com/a/1732454/337079 – mogsie

20

Usando xmlstarlet:

xmlstarlet val -e file.xml 
xmlstarlet ed -u "//settings/setting/@name" -v 'local directory2' file.xml 
xmlstarlet ed -u "//settings[1]/setting/@name" -v 'local directory2' file.xml 

# edit file inplace 
xmlstarlet ed -L -u "//settings/setting/@name" -v 'local directory2' file.xml 
+0

No tengo la opción -L de editar en el lugar, ¿qué edición de xmlstartlet y unix está usando? – simpatico

+0

Ah, genial - la opción -L era justo lo que estaba buscando. –

Cuestiones relacionadas