Ecco un esempio funzionante completo.
Se si tratta solo di estrarre gli indirizzi e-mail, potresti semplicemente fare qualcosa del tipo:
1) Supponiamo che il file XML spam.xml sia come
<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) Puoi ricevere le email ed elaborarle con questo breve codice 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
Il risultato di questo esempio è:
0 [email protected]
1 [email protected]
2 [email protected]
Nota importante:
Non usarlo per cose serie. Questo va bene per giocare, ottenere risultati rapidi, imparare grep, ecc. ma dovresti sicuramente cerca, impara e usa un parser XML per la produzione (vedi il commento di Micha sotto).
Potresti provare xmllint
Il programma xmllint analizza uno o più file XML, specificati nella riga di comando come xmlfile. Stampa vari tipi di output, a seconda delle opzioni selezionate. È utile per rilevare errori sia nel codice XML che nel parser XML stesso
Ti permette di selezionare gli elementi nel documento XML tramite xpath, usando l'opzione --pattern.
Su Mac OS X (Yosemite), è installato per impostazione predefinita.
Su Ubuntu, se non è già installato, puoi eseguire apt-get install libxml2-utils
Sono sorpreso che nessuno abbia menzionato xmlsh. La dichiarazione d'intenti:
Una shell a riga di comando per XML Basata sulla filosofia e il design delle shell Unix
xmlsh fornisce un ambiente di scripting familiare, ma specificatamente pensato per lo scripting di processi xml.
Qui viene fornito un elenco di comandi simili a shell.
Uso il xed
comanda molto che equivale a sed
per XML e consente XPath
ricerca basata e sostituzioni.
C'è anche xmlstarlet (disponibile anche per Windows).
http://xmlstar.sourceforge.net/doc/xmlstarlet.txt