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?
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.
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.
Es ist nicht die beste Lösung, ich würde nach XML lib in bash suchen, aber Sie können:
%Vor%