Thoralf Knuth: (e|f|)grep vs. pregmatch

Beitrag lesen

Hallo,

ich bin immer noch[1] dabei, meine Logs, die komplett alle meine (Sub-)Domains enthalten, zu splitten. Mit PHP ist das mittlerweile kein Problem. Mit Hilfe von O'Reillys PHP Cookbook habe ich eine(n?) PCRE, mit dem ich die Domain rausnehme, ob mit oder 'www.':

/* Client IdentD User [Zeit] "method Request protocol" Status Bytes vhost "Referer" "UserAgent" "Proxy-Real-IP" */
   $sPattern = '/^([^ ]+) ([^ ]+) ([^ ]+) ([[^]]+]) "(.*) (.*) (.*)" ([0-9-]+) ([0-9-]+) (www.|)(.*) "(.*)" "(.*)" "(.*)"$/';

Mit einem einfachen preg_match() und list() splitte ich mir den Eintrag auf und kann dann je nach vhost weiter verfahren.

Nun will ich das natürlich direkt mit grep oder egrep machen. Nur das kriegt er nicht hin.
Ich hab mit ein Test-Log mit Auszügen genommen und das mit PHP "auswerten" lassen und habe das erwartete und erwünschte Ergebnis.

grep '^([^ ]+) ([^ ]+) ([^ ]+) ([[^]]+]) "(.*) (.*) (.*)" ([0-9-]+) ([0-9-]+) (www.|)(example.org) "(.*)" "(.*)" "(.*)"$' dateiname

gibt mir keine einzige Zeile als Ergebnis. ('/' an Anfang und Ende entfernz, mit und ohne '-e' probiert)

grep 'example.org' dateiname

gibt mir wiederrum alle die Zeilen, die example.org im Eintrag haben. Ist zwar richtig, aber nutzt mir nichts, da dann ja auch Referer ausgewertet werden.

Fernziel, aber soweit bin ich noch nicht, ist eine backreference im Dateinamen, so dass ich alle Zeilen ausgeben lassen kann in eine Datei, die den vhost im Dateinamen trägt. Aber das ist noch gar nicht das Ziel. Ich wäre schon dankbar, wenn grep meinen RegExp fressen würde.

Hat mir jemand Tipps, Hinweise, Watschn?

Gruß & Dank, Thoralf

[1] http://forum.de.selfhtml.org/archiv/2004/2/73573/

--
Sic Luceat Lux!