GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo analizar XML usando shellscript?

Aquí hay un ejemplo de trabajo completo.
Si solo está extrayendo direcciones de correo electrónico, podría hacer algo como:
1) Supongamos que el archivo XML spam.xml es como

<spam>
<victims>
  <victim>
    <name>The Pope</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
  <victim>
    <name>George Bush</name>
    <email>[email protected]</email>
    <is_satan>1</is_satan>
  </victim>
  <victim>
    <name>George Bush Jr</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
</victims>
</spam>

2) Puede obtener los correos electrónicos y procesarlos con este breve código bash:

#!/bin/bash
emails=($(grep -oP '(?<=email>)[^<]+' "/my_path/spam.xml"))

for i in ${!emails[*]}
do
  echo "$i" "${emails[$i]}"
  # instead of echo use the values to send emails, etc
done

El resultado de este ejemplo es:

0 [email protected]
1 [email protected]
2 [email protected]

Nota importante:
No uses esto para asuntos serios. Esto está bien para jugar, obtener resultados rápidos, aprender grep, etc. pero debería definitivamente busque, aprenda y use un analizador XML para la producción (vea el comentario de Micha a continuación).


Podrías probar con xmllint

El programa xmllint analiza uno o más archivos XML, especificados en la línea de comandos como xmlfile. Imprime varios tipos de salida, dependiendo de las opciones seleccionadas. Es útil para detectar errores tanto en el código XML como en el propio analizador XML

Te permite seleccionar elementos en el documento XML por xpath, usando la opción --pattern.

En Mac OS X (Yosemite), está instalado de forma predeterminada.
En Ubuntu, si aún no está instalado, puede ejecutar apt-get install libxml2-utils


Me sorprende que nadie haya mencionado xmlsh. La declaración de misión:

Un shell de línea de comandos para XML basado en la filosofía y el diseño de los shells de Unix

xmlsh proporciona un entorno de secuencias de comandos familiar, pero específicamente diseñado para generar secuencias de comandos de procesos xml.

Aquí se proporciona una lista de comandos tipo shell.

Yo uso el xed comando mucho que es equivalente a sed para XML y permite XPath búsqueda basada y reemplazos.


También está xmlstarlet (que también está disponible para Windows).

http://xmlstar.sourceforge.net/doc/xmlstarlet.txt


Linux
  1. Cómo analizar XML y quitar etiquetas usando ejemplos de XPATH en Linux (Cómo combinar varios comandos usando PIPE en Linux)

  2. Cómo rastrear scripts de Python usando trace.py

  3. ¿Cómo adjuntar un archivo usando el comando de correo en Linux?

  4. ¿Cómo analizar un archivo CSV en Bash?

  5. ¿Cómo predeterminar Python3.8 en mi Mac usando Homebrew?

Cómo cambiar el nombre de los archivos usando la línea de comandos en Linux

Cómo enumerar los sistemas de archivos en Linux usando Lfs

Cómo instalar NethServer 7.3 usando ISO

Cómo analizar o ver el código XML en la línea de comandos de Linux

Cómo:una introducción al uso de Git

Cómo conectarse a MySQL usando PHP