Probleme traitement expression regulière
Envoi de mikila le 14 Aout 2003 17:56:51:
Bonjour,
J'ecris un script Perl pour traiter un fichier de Log Ftp, mais l'execution ne retourne rien.Je pense que ça merde au niveau des expressions regulières mais j'ai du mal a retrouver ou ca bloque. Quelqu'un pourrait me donner un coup de main ?
Merci d'avance. Voici le script
/usr/bin/perl #
use POSIX; use Time::Local; my $COMMON; my $MonthList={ 'Jan'=>1, 'Feb'=>2, 'Mar'=>3, 'Apr'=>4, 'May'=>5, 'Jun'=>6, 'Jul'=>7, 'Aug'=>8, 'Sep'=>9, 'Oct'=>10, 'Nov'=>11, 'Dec'=>12 };
$ftp_remotehost = '(\d*\.\d*\.\d*\.\d*)\s'; $ftp_localserver = '(.*)\s'; $ftp_user = '([^\s]*)\s'; $ftp_mday = '\[(\d*)\/'; $ftp_mon = '([^\s]*)\/'; $ftp_year = '([^\s]*):'; $ftp_hour = '([^\s]*)\s'; $ftp_zone = '\+(.*)\]'; $ftp_action = '"([^\s]*)\s'; $ftp_file = '([^\s]*)"\s'; $ftp_code = '^(\d*)\s'; $ftp_size = '^(.*)\s'; $ftp_time = '^(.*)';
$COMMON='^'.$ftp_remotehost.$ftp_localserver.$ftp_user.$ftp_mday.$ftp_mon.$ftp_year.$ftp_hour.$ftp_zone.$ftp_fcl.$ftp_file.$ftp_code.$ftp_size.$ftp_time ;
print "$COMMON\n\n"; while (<>) { if ( m#$COMMON# ) { print "debut ...."; $user = $3; $mon = $$MonthList{$5}-1; $mday = $4; $hour = $7; $year = $6; $action = $9; $code = $11; $file = $10; $size = $12; $t_time = $13; if ( $size == '-' ) { $size=0; } if ( $t_time == '-' ) { $t_time=0; } my ($secondes, $minutes, $heures, $jour_mois, $mois, $annee, $jour_semaine, $jour_calendaire, $heure_ete) = localtime(time); ($hours, $min, $sec ) = split(":", $hour); $time = timelocal($sec, $min, $hours, $mday, $mon, "$annee"); $date_rq = POSIX::strftime("%d/%b/%Y %T", localtime($time)); print "$date_rq#$user#$action#$file#$code#$size#$t_time\n"; } }
Allure du fichier de Log :
207.45.248.20 monitoring [11/Aug/2003:18:20:48 +0200] "LIST " 226 60 0.067 207.45.248.20 monitoring [11/Aug/2003:18:24:48 +0200] "PASS (hidden)" 230 - -
Nb: il y'a le "$ftp_localserver " entre l'adresse IP et monitoring (user). Dans mon cas, il retourne souvent un"espace" .
Réponses:
Répondre
|
|