Ich möchte bestimmte URLs aus einer gespeichertenhtml-Datei mit einem einfachen Bash-Skript/Befehl, damit ich sie wget
später herunterladen kann.
Was ich bisher habe, ist:
awk 'BEGIN{ RS="<a *href *= *\""} NR>2 {sub(/".*/,"");print; }' index.html >> url-list.txt
das jeden Link, der in meiner HTML-Datei enthalten ist, in ein übersichtliches TXT-Dokument schreibt.
Was ich jedoch brauche, sind nur spezifische Links
- aus einer bestimmten Domain
- alle .ogg Dateien zum Beispiel
alles was am Ende so aussehen würde:
http://www.foo.com/(zufälliger Ordner)/(zufälliger Basisname).ogg
oder
Dank im Voraus!
Antwort1
Sie sagen, Sie müssen es „in Bash“ tun, aber Sie scheinen „in einem Skript“ und nicht „mit reiner Bash-Syntax“ zu meinen (da besteht ein Unterschied). Ich nehme an, Sie wollen die Bedeutung „in einem Skript“.
Wenn Sie alle Links in einem Dokument in separaten Zeilen gespeichert haben, können Sie alle Links auf der Domain auswählen http://www.example.com/
mit z. B.
grep "^http://www\.example\.com/" filewithlinks.txt
oder alle Links die mit .ogg
enden
grep "\.ogg$" filewithlinks.txt
(Der Backslash vor Punkten dient als Escapezeichen für das .
Zeichen " ", das sonst "beliebiges Zeichen" bedeutet. " \.
" bedeutet stattdessen einen wörtlichen Punkt. Ohne Escapezeichen werden auch Links gefunden, die beispielsweise mit "logg" enden.)
Sie könnten die Zeilenübereinstimmung auch direkt im awk
Befehl durchführen, aber das wäre meiner Meinung nach komplizierter, wenn man es von Zeit zu Zeit ändern müsste. Am einfachsten ist es, die vollständige Liste der Links wie oben beschrieben in einer Datei zu speichern und dann einfach mit z. B. grep
oben in der Datei zu suchen. Dann müssen Sie das Dokument auch nicht erneut herunterladen und analysieren, wenn Sie das Übereinstimmungsmuster ändern möchten.