So verwenden Sie bash/sed zum Extrahieren von XML-Attributwerten

So verwenden Sie bash/sed zum Extrahieren von XML-Attributwerten

Ich habe den folgenden Grep-Befehl in sed weitergeleitet, um ein Elementnamenattribut zu finden und das Sed-Ergebnis in einer Namensvariablen zu speichern.

 name=$(grep -E "<element.*name=.*/>" "$F" | sed -e "s/.*<element.*name=\(.*\)\/>.*?/\1/")

Beispieldaten -

<element name="Barium"/>

Gewünschte Ausgabe -

Barium

Tatsächliche Ausgabe -

<element name="Barium"/>

Ich bin ein wenig verwirrt, wie ich den Überschuss mit dem Sed-Befehl loswerde.

(Ich weiß, dass XMLlint dies vereinfachen würde, kann es dafür aber nicht verwenden.)

Antwort1

Dafür brauchen Sie kein sed:

grep -Po '(?<=<element name=")[^"]+' <file>

Oder

grep -Po '<element name="\K[^"]+' <file>

verwandte Informationen