Ich schreibe ein Bash-Skript, das eine HTML-Datei analysiert und
Ich möchte den Inhalt jedes einzelnen <tr>...</tr>
erhalten. Also sieht mein Befehl so aus:
Aber es scheint, dass grep
mir das Ergebnis von:
Wie kann ich .*
nicht gierig machen?
Wenn Sie GNU Grep
haben, können Sie -P
verwenden, um die Übereinstimmung nicht gierig zu machen:
Die Option -P
aktiviert Perl Compliant Regular Expression (PCRE) , die für die nicht gierige Übereinstimmung mit ?
als regulärer Basisausdruck (BRE) und benötigt wird Erweiterter Regulärer Ausdruck (ERE) unterstützt dies nicht.
Wenn Sie -P
verwenden, können Sie auch Umfragen verwenden, um zu vermeiden, dass die Tags in der Übereinstimmung gedruckt werden so:
Wenn Sie nicht GNU grep
haben und der HTML-Code gut formatiert ist, können Sie einfach Folgendes tun:
Hinweis: Das obige Beispiel funktioniert nicht mit verschachtelten Tags innerhalb von <tr>
.
.*?
ist ein regulärer Perl-Ausdruck. Ändere dein grep
zu