Marcel: Reguläre Ausdrücke

Beitrag lesen

die logdatei ist vorher in das array @datei geladen worden.
sie besteht aus 9 spalten, dies wird mit dem split geteilt und im endeffekt in einem hash (%logentry).

und mit dem IF habe ich alle einträge bekommen die mit http und ftp angefangen haben, d.h. der originale eintrag sieht z.B.so aus:

http://officescan-t.activeupdate.trendmicro.com/Activeupdate/server.ini

ich will aber nur "officescan-t.acriveupdate.trendmicro.com" haben

oder
http://www.crazyhandyfun.de/layouts/layout-1/images/bt_kurzel.gif

"www.crazyhandyfun.de"

allerdings sind wohl auch solche einträge vorhanden:

freemail.web.de:443

da soll natürlich nur "freemail.web.de" bei rauskommen.

so sieht mein script aus:

my %ip_hits;
my %ip_bytes;
my %domain_hits;
my %domain_bytes;

foreach(@datei)
{
@elemente = split(/ +/, $_);
local %logentry = (time => $elemente[0],elapsed => $elemente[1], remotehost => $elemente[2], code_status => $elemente[3], bytes => $elemente[4], method => $elemente[5], url => $elemente[6], rfc931 => $elemente[7], peerstatus_peerhost => $elemente[8], type => $elemente[9]);

$log= $logentry{url};
if ($log =~ /^(https?|ftps?)://(.*?)/(.*?)$/)
 {
 $ip_hits{$logentry{remotehost}}++;
 $ip_bytes{$logentry{remotehost}}+=$logentry{bytes};
 $domain_hits{$2}++;
 $domain_bytes{$2}+=$logentry{bytes};
 }

}#ENDE foreach

gruß
marcel