href-Attribute aus einer HTML-Seite mit grep & Regex extrahieren
Sie können einen regulären Ausdruck verwenden, um nach href="..."-Attributen in einem HTML wie folgt zu greppen:
grep -oP "(HREF|href)=\"\K.+?(?=\")"grep wird mit -o (nur Treffer ausgeben, dies ist erforderlich, um zusätzliche Funktionen wie Lookahead-Assertions zu erhalten) und -P (Perl-Regulärer-Ausdruck-Engine verwenden) betrieben. Der reguläre Ausdruck ist im Wesentlichen
href=".*"wobei das .+ im Non-Greedy-Modus verwendet wird (.+?):
href=".+?"Dies liefert uns Treffer wie
href="/files/image.png"Da wir nur den Inhalt der Anführungszeichen (") wollen und nicht den href="..."-Teil, können wir Positive Lookbehind-Assertions (\K) verwenden, um den href-Teil zu entfernen:
href=\"\K.+?\"aber wir wollen auch das schließende Anführungszeichen loswerden. Um dies zu tun, können wir Positive Lookahead-Assertions ((?=\")) verwenden:
href=\"\K.+?(?=\")Nun wollen wir sowohl href als auch HREF matchen, um etwas Groß-/Kleinschreibungs-Unempfindlichkeit zu bekommen:
(href|HREF)=\"\K.+?(?=\")Oft wollen wir gezielt einen Dateityp matchen. Beispielsweise könnten wir nur .png matchen:
(href|HREF)=\"\K.+?\.png(?=\")Um fälschlich zu lange Treffer auf einigen Seiten zu reduzieren, verwenden wir [^\"]+? anstelle von .+?:
(href|HREF)=\"\K[^\"]+?\.png(?=\")Dies verbietet Treffer, die “-Zeichen enthalten, und verhindert dadurch, dass mehr als das Tag gematcht wird.
Verwendungsbeispiel:
wget -qO- https://nasagrace.unl.edu/data/NASApublication/maps/ | grep -oP "(href|HREF)=\"\K[^\"]+?\.png(?=\")"Ausgabe:
/data/NASApublication/maps/GRACE_SFSM_20201026.png
[...]