"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Perl - Bestimmten Teil aus Datei auslesen

muene 20.10.2005 - 20:10 695 4
Posts

muene

Addicted
Avatar
Registered: Jan 2004
Location: @Home
Posts: 430
Hi,

Ich habe eine Datei (access.log) und lese diese mit Perl aus. Danach steht das ausgelesene in @lines.

In der Datei (access.log) steht folgendes:

127.0.0.1 - - [26/Sep/2005:19:15:10 +0200] "GET /cgi-bin/loggy.cgi?___conf___+FRANK MILLER+MUELLNER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)"
127.0.0.1 - - [26/Sep/2005:19:15:20 +0200] "GET /cgi-bin/loggy.cgi?___conf___+FRANK MILLER+MUELLNER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)"
127.0.0.1 - - [26/Sep/2005:19:15:31 +0200] "GET /cgi-bin/loggy.cgi?___conf___+KARL HUBER+HUBER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)"
127.0.0.1 - - [26/Sep/2005:19:15:41 +0200] "GET /cgi-bin/loggy.cgi?___conf___+HANS MAIER+COMPUTER HTTP/1.1" 404 1122 "-" "Mozilla/3.0 (compatible; Indy Library)"

Nun möchte ich aus @lines immer den Text nach dem Plus herauslesen. Also z.B. FRANK MILLER und MUELLNER

wie mache ich das am besten unter Perl?
vielen dank im vorhinein
mfg muene


Ps: Weis vielleicht zufällig jemand auch noch wie ich das ganze dann in einem HTML File ausgeben kann?
Bearbeitet von muene am 21.10.2005, 11:49

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11326
Zitat von muene
wie mache ich das am besten unter Perl?

Code:
while (@lines)
{
    m/___\+(.*)\+(.*)?HTTP/;
    print "$1, $2\n";
}


Zitat von muene
Ps: Weis vielleicht zufällig jemand auch noch wie ich das ganze dann in einem HTML File ausgeben kann?

Ja, einfach ein paar print-Statements mehr, die HTML-Text ausgeben.
Bearbeitet von that am 20.10.2005, 20:59

muene

Addicted
Avatar
Registered: Jan 2004
Location: @Home
Posts: 430
Habs gerade ausprobiert, aber es funktioniert nicht wirklich.
Es wird nur unendlich lange "," ausgegebn.

mfg

Muli

Little Overclocker
Registered: Mar 2001
Location: Ziersdorf
Posts: 105
hmm, probier mal:

Code:
foreach (@lines) {
        chomp;
        #print "$_\n";
        if (/___\+(.*)\+(.*) HTTP/) {
                print "$1, $2\n";
        }
        else {
                print "no match: $_\n";
        }
}

das sollte funktionieren, tuts zumindest bei mir ;)

cheers

PS: hab obiges auch probiert, mit
Code:
/___\+(.*)\+(.*)?HTTP/
funkts auch..
vielleicht typo eingebaut?

muene

Addicted
Avatar
Registered: Jan 2004
Location: @Home
Posts: 430
Thx, jetzt funktionierts.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz