Website Quellcode mit bash auslesen?
Ich möchte mit einem bash-script den Quellcode einer Website auslesen, sodass ich als Ausgabe einen einzelnen Link (nur den Link) bekomme. Das Problem: der Link steht nicht allein in der Zeile Quellcode; sonst ginge ja einfach:
wget <a href="https://beliebige.website.de/">https://beliebige.website.de/</a> -O Datei.txt
grep [Link] Datei.txt
Leider wird dabei die ganze Zeile Quellcode ausgegeben. Wie kann ich nur einen speziellen Suchbegriff als Ausgabe bekommen? Möglich wäre auch, anzugeben, die wievielten Zeichen der Zeile (z.B. Zeichen 11-20) ausgegeben werden sollen.
Wie bewerkstellige ich das?
2 Antworten
Der "o" Schalter vom grep Kommando liefert dir "nur" den aktuellen Treffer, und nicht die Zeile.
Da grep aber keine Gruppen unterstützt, kannst du auch - falls du komplexere Dinge verarbeiten musst - zwei grep-Kommandos hintereinander hängen:
wget -qO- 'website.tld/pfad/datei.ext' | grep -oiP 'href="https?://[^"]+"' | grep -oiP 'https?://[^"]+'
Das "O-" leitet die heruntergeladene Datei auf die Standardausgabe um, also brauchst du keine temporäre Datei mehr. "-q" sagt wget einfach nur, dass du keine weiteren Ausgaben wünschst.
Das erste grep liefert alle href-Attribute, die eine absolute URL beginnend mit "http" oder "https" enthalten. Das zweite grep extrahiert den reinen Link.
(Falls du keine mächtigen Perl Regexen benötigst, kannst du auch auf die "-P" Option verzichten, und statt mehrere grep Kommandos durch Pipe, lieber mehrere Regexen durch "-e" verbinden!)
Viel Spaß! :)
Ich würde es mit Stringoperatoren machen. Findest du hier:
http://tldp.org/LDP/abs/html/string-manipulation.html
entweder unter substring removal (mit Suchmuster wie "http:...") oder substring extraction (mit Positionsangaben).