Wie finde ich Informationen in einem XML-Tag mit grep?

8

Ich arbeite an einem Linux-Shell-Skript, um Informationen in einer XML-Datei mit grep zu finden. Ich bin auf einem Mac, ich hoffe, es ist nicht so wichtig.

Um die benötigten Informationen zu finden, starte ich:

%Vor%

Ich bekomme im Gegenzug eine Liste von Übereinstimmungen und das enthält das <title> -Tag.

Wie kann ich eine Liste mit nur den Informationen innerhalb des title -Tags erhalten, aber ohne das title -Tag mit grep?

    
Filype 28.05.2012, 08:43
quelle

4 Antworten

3

Ich kann nicht sehen, warum Sie grep dafür verwenden möchten, während es mit einem trivialen XPath-Ausdruck gelöst werden kann:

%Vor%

Es gibt viele Befehlszeilentools für XPath, die normalerweise mit dem Betriebssystem gebündelt sind.

Antworten auf diese Frage zu Stack Overflow listen eine Reihe solcher Tools auf.

Das Problem mit grep ist, dass es ein generisches Werkzeug für die Textverarbeitung ist und keine XML-Struktur kennt. Für ein sehr einfaches Szenario können Sie es zum Laufen bringen . Wenn das Dokument komplex ist oder wenn Sie es in einem Skript verwenden, das Monate oder Jahre überlebt und nicht nur einen einmaligen Job, können Sie sich am Ende für die Ergebnisse entschuldigen.

XPath macht es einfach, den Unterschied zwischen ähnlich benannten Tags zu erkennen, die in verschiedenen Kontexten in einem Dokument vorkommen.

%Vor%

Das Extrahieren des Titels des Artikels, der in diesem Dokument mit grep dargestellt wird, würde fehlschlagen, wenn Sie eine der anderen hier angegebenen Antworten verwenden würden. Sie könnten den regulären Ausdruck technisch schreiben, um zu bekommen, was Sie brauchen, aber es ist viel einfacher mit XPath.

%Vor%

Wenn Sie wissen, dass es sich um ein triviales Dokument handelt und sich das Format nicht ändert oder wenn es sich um eine einmalige Aufgabe handelt, bei der Sie die Ergebnisse schnell validieren können, können Sie grep verwenden, wie von anderen erläutert.

    
toniedzwiedz 28.05.2012, 09:55
quelle
14

Da Sie bereits grep -P verwenden, warum benutzen Sie nicht seine Funktionen?

%Vor%

Im allgemeinen Fall ist XPath die richtige Lösung, aber für Spielzeugszenarien, ja Virginia, kann es gemacht werden.

    
tripleee 28.05.2012 10:50
quelle
2

Es ist nicht die beste Lösung, ich würde nach XML lib in bash suchen, aber Sie können:

%Vor%     
hovanessyan 28.05.2012 09:10
quelle
1

Sie können xgrep mithilfe von xpath wie in Tom

vorgeschlagen installieren

man xgrep

    
Yannick 11.02.2013 15:25
quelle

Tags und Links