Also kurz erläutert...
als Grundlage nehme ich nun mal diese URL:
Code:
curl --silent "http://www.clever-tanken.de/showtank_payed.asp?Tankstelle=Tanken+%26+Mehr+D%FCsseldorfer+Str%2E+Duisburg&secureid=14466&typ=&ort=Duisburg" | grep -E '(<font class="partnerhead">Super)' -A 2 | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | sed 2q | sed -e 's/(Schutzsorte)//' | sed "s/ //g" | sed 's/Super://g' | sed 's/9//g' | sed 'N;s/\n//'
So was passiert nun:
Als erstes wird die komplette Webseite dessen URL wir angeben als Quelltext eingelesen, dies geht mit dem Befehl "curl"
Code:
curl --silent "http://www.clever-tanken.de/showtank_payed.asp?Tankstelle=Tanken+%26+Mehr+D%FCsseldorfer+Str%2E+Duisburg&secureid=14466&typ=&ort=Duisburg"
die Option "--silent" sorgt dafür das wir nicht die eingelesenen Daten als Ausgabe sehen...
nun kommt das wichtigste Zeichen!
das sogenannte "Pipe" | (ALT + 7)
Dieses Zeichen ist als "Datenträger" anzusehen, es überträgt die Daten von einem Befehl zum anderen Befehl...
Optisch als solches vorzustellen
Code:
Befehl1 -> Eingabe -> Verarbeitung -> Ausgabe1 | Befehl2 -> Eingabe1 -> Verarbeitung -> Ausgabe2 | usw.
in unserem Geeklet-Code "pipen" wir den Quelltext an den Befehl "grep"
mit dem Befehl grep, kann man in den übergebenen Daten suchen (ich merke es mir, in dem ich sage "grab" = "grep")
Code:
grep -E '(<font class="partnerhead">Super)' -A 2
wir suchen nun einen Teil der so selten vorkommt wie nur möglich, so ersparen wir uns weitere Arbeit... in unserem Fall wäre das "(<font class="partnerhead">Super"
der Schalter -E sagt grep das es sich um ein "Suchwort" handelt. würde man den Schalter -f nehmen, so müsste man eine Datei angeben...
an dem grep-Befehl steht am Ende noch ein -A 2, damit wird gesagt, das man ab dem gefunden "Suchwort" noch gern 2 Folgezeilen mit Ausgeben möchte
Ausgabe:
Code:
<td bgcolor="#E5ECF0"><font class="partnerhead">Super (Schutzsorte):</td> <TD bgcolor="#BBCCD7"><font class="partnerhead">1,669</TD>
</TR>
--
<td bgcolor="#E5ECF0"><font class="partnerhead">SuperPlus:</td>
<TD bgcolor="#BBCCD7"><font class="partnerhead">1,739</TD>
</TR>
nun kommt der spannende Teil... sed
mit sed kann man mit Hilfe von RegEx Parametern Datensätze komplett Löschen/Beschneiden/Ändern
das erste sed Kommando entfernt in unserem Beispiel alle HTML Tags sodass nur noch "lesbarer" Text über bleibt.
Code:
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
(genaue Erklärung kann ich so adhoc nicht dazu geben, da ich mich mit RegEx noch nicht so auskenne...)
Ausgabe:
Code:
Super (Schutzsorte): 1,669
--
SuperPlus:
1,739
der 2. sed Befehl
dieser gibt uns nun nur die ersten beiden Zeilen aus und beendet dann die Ausgabe mit "q" für quit und löscht den Rest
Ausgabe:
Code:
Super (Schutzsorte):
1,669
der 3. sed Befehl
Code:
sed -e 's/(Schutzsorte)//'
löscht in unserem Fall das Wort "Schutzsorte" und ersetzt es mit nichts... "sed -e 's/suchwort/neues Wort/'"
Ausgabe:
der 4. sed Befehl
sorgt dafür das alle Leerzeichen entfernt werden... das g am Ende sorgt dafür das "ALLE" Leerzeichen mit genommen werden, das g nennt man auch "greedy, eg. gierig" die sorgt dafür das bis zum Zeilenende gearbeitet wird.
Ausgabe:
Der 5. sed Befehl
entfernt das Suchwort "Super:"
Ausgabe:
Der 6. sed Befehl
entfernt am Ende die 9
Ausgabe:
Der 7. und letzte sed Befehl
entfernt alle Zeilenumbrüche
Ausgabe:
Möchte man nun den Diesel-Preis, so muss man lediglich das grep-Suchwort in Diesel ändern...
Übrigens kann man jeden einzelnen Befehl super im Terminal direkt ausführen...
Ich hoffe das man nun einigermaßen nachvolziehen kann was hier passiert...
Quellen zum nachschlagen:
cURL:
http://curl.haxx.se/docs/manpage.html
grep:
http://unixhelp.ed.ac.uk/CGI/man-cgi?grep
sed:
http://unixhelp.ed.ac.uk/CGI/man-cgi?sed