Da Sie Inhalte name="
abgleichen müssen, ohne sie in das Ergebnis aufzunehmen (müssen übereinstimmen, aber nicht Teil des gewünschten Ergebnisses sein), ist eine Form der Übereinstimmung mit der Breite Null oder der Gruppenerfassung erforderlich. Dies kann einfach mit den folgenden Tools durchgeführt werden:
Perl
Mit Perl können Sie die n
Option verwenden, um Zeile für Zeile eine Schleife zu erstellen und den Inhalt einer Erfassungsgruppe zu drucken, wenn er übereinstimmt:
perl -ne 'print "$1\n" if /name="(.*?)"/' filename
GNU grep
Wenn Sie eine verbesserte Version von grep haben, z. B. GNU grep, steht Ihnen möglicherweise die -P
Option zur Verfügung. Diese Option aktiviert Perl-ähnliche Regex, sodass Sie \K
eine Kurzform verwenden können. Die Übereinstimmungsposition wird zurückgesetzt, also alles, was vorher Null ist.
grep -Po 'name="\K.*?(?=")' filename
Mit dieser o
Option druckt grep nur den übereinstimmenden Text anstelle der gesamten Zeile.
Vim - Texteditor
Eine andere Möglichkeit besteht darin, einen Texteditor direkt zu verwenden. Mit Vim besteht eine der verschiedenen Möglichkeiten, dies zu erreichen, darin, Zeilen ohne zu löschen
name=
und dann den Inhalt aus den resultierenden Zeilen zu extrahieren:
:v/.*name="\v([^"]+).*/d|%s//\1
Standard grep
Wenn Sie aus irgendeinem Grund keinen Zugriff auf diese Tools haben, kann mit Standard-Grep etwas Ähnliches erreicht werden. Ohne das Umschauen muss es jedoch später bereinigt werden:
grep -o 'name="[^"]*"' filename
Ein Hinweis zum Speichern von Ergebnissen
In allen obigen Befehlen werden die Ergebnisse an gesendet stdout
. Es ist wichtig zu beachten, dass Sie sie jederzeit speichern können, indem Sie sie durch Anhängen an eine Datei weiterleiten:
> result
bis zum Ende des Befehls.