GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie parse ich XML mit Shellscript?

Hier ist ein voll funktionsfähiges Beispiel.
Wenn es nur E-Mail-Adressen extrahiert, könnten Sie einfach so etwas tun:
1) Angenommen, die XML-Datei spam.xml ist wie

<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) Mit diesem kurzen Bash-Code können Sie die E-Mails abrufen und verarbeiten:

#!/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

Ergebnis dieses Beispiels ist:

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

Wichtiger Hinweis:
Verwenden Sie dies nicht für ernste Angelegenheiten. Dies ist in Ordnung, um herumzuspielen, schnelle Ergebnisse zu erzielen, grep zu lernen usw., aber Sie sollten auf jeden Fall suche, lerne und verwende einen XML-Parser für die Produktion (siehe Michas Kommentar unten).


Sie könnten es mit xmllint

versuchen

Das Programm xmllint analysiert eine oder mehrere XML-Dateien, die in der Befehlszeile als xmlfile angegeben werden. Abhängig von den ausgewählten Optionen werden verschiedene Ausgabetypen gedruckt. Es ist nützlich, um Fehler sowohl im XML-Code als auch im XML-Parser selbst zu erkennen

Es erlaubt Ihnen, Elemente im XML-Dokument per xpath auszuwählen, indem Sie die Option --pattern verwenden.

Unter Mac OS X (Yosemite) wird es standardmäßig installiert.
Wenn Ubuntu noch nicht installiert ist, können Sie apt-get install libxml2-utils ausführen


Ich bin überrascht, dass niemand xmlsh erwähnt hat. Das Leitbild :

Eine Befehlszeilen-Shell für XML Basierend auf der Philosophie und dem Design der Unix-Shells

xmlsh bietet eine vertraute Scripting-Umgebung, die jedoch speziell auf das Scripting von XML-Prozessen zugeschnitten ist.

Eine Liste von Shell-ähnlichen Befehlen finden Sie hier.

Ich verwende den xed viel befehlen, was sed entspricht für XML und erlaubt XPath basierende Suche und ersetzt.


Es gibt auch xmlstarlet (das auch für Windows verfügbar ist).

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


Linux
  1. Wie man C-Programme unter Linux mit gdb debuggt

  2. So analysieren Sie XML und Strip-Tags mithilfe von XPATH-Beispielen in Linux (So kombinieren Sie mehrere Befehle mit PIPE in Linux)

  3. Wie hängt man eine Datei mit dem Mail-Befehl unter Linux an?

  4. Wie parse ich eine CSV-Datei in Bash?

  5. Wie setze ich Python3.8 auf meinem Mac mit Homebrew als Standard ein?

So benennen Sie Dateien über die Befehlszeile in Linux um

So listen Sie Dateisysteme in Linux mit Lfs auf

So installieren Sie NethServer 7.3 mit ISO

So analysieren oder zeigen Sie XML-Code in der Linux-Befehlszeile an

Gewusst wie:Eine Einführung in die Verwendung von Git

Wie man mit PHP eine Verbindung zu MySQL herstellt