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