Da fragt mich doch jemand, wie man mit einem regulären ausdruck und sed
die URLs aus einer HTML-datei extrahieren kann. Meine erste reakzjon: „Damit ist sed
ein bisschen überfordert, das wird eine sehr lange zeile“. Aber ich habe ja nochmal nachgedacht, und dann fiel mir ein, dass der textbrauser lynx
dieses problem schon hervorragend löst, und etwa zwei minuten später ging die folgende funktion für die sh
raus:
getlinks() { for i do lynx -dump -listonly "$i" | sed 1,3d done | sed "s/ *[0-9]*\. *//" }
Diese funkzjon getlinks
kann mit beliebig vielen HTML-dateien oder auch gültigen URLs als parameter aufgerufen werden, und lynx
erledigt den größten teil der arbeit. Heraus kommt eine Liste mit den URLs, jede hübsch einzeln auf einer zeile und ohne weiteren kram, der die weitere verarbeitung in einem skript erschwert. Die ausgabe wird mit zwei sed-befehlen gefiltert. Der erste entfernt die laufenden nummern, die am anfang der zeilen stehen. Das sollte eigentlich auch mit der lynx
-opzjon -nonumbers
gehen, aber unglücklicherweise verstand der lynx
auf der kiste, auf der dieses skript laufen sollte, ausgerechnet diese eine opzjon nicht und wir hatten keine lust, schnell einen neuen zu kompilieren. Der zweite audruck löscht einfach nur die ersten drei zeilen, die eine hier störende überschrift enthalten. Wer diese funkzjon benutzen will, sollte sich aber vorher einmal die ausgabe von lynx -dump -listonly
anschauen, denn es ist nicht auszuschließen, dass die ausgabe in anderen versjonen ein bisschen anders aussieht.
Wenn es eine wirkliche stärke unixoider betriebssysteme gibt, denn ist es die art, wie man sich die bestehenden programme „zusammenstecken“ kann, um mit relativ wenig aufwand komplexe probleme zu lösen. Das war in den siebziger jahren schon ein starkes konzept, und es ist auch vierzig jahre später noch unendlich nützlich. Leider gerät es mit dem vordringen grafischer klickflächen immer mehr in vergessenheit, selbst bei menschen mit guten technischen kenntnissen — und in der folge werden viele probleme mit viel zu großem aufwand gelöst.