GNU/Linux >> Linux Esercitazione >  >> Linux

Come analizzare XML usando shellscript?

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


Linux
  1. Come eseguire Ssh su un server utilizzando un altro server??

  2. Come concatenare stringhe in Bash

  3. Come allegare un file usando il comando mail su Linux?

  4. Come analizzare un file CSV in Bash?

  5. Come riempire un file con FF usando dd?

Come rinominare i file usando la riga di comando in Linux

Come elencare i filesystem in Linux usando Lfs

Come installare NethServer 7.3 usando ISO

Come analizzare o visualizzare il codice XML nella riga di comando di Linux

Procedura:un'introduzione all'uso di Git

Come connettersi a MySQL usando PHP