Pages : 1
#1 Le 09/07/2012, à 14:49
- rahon93
expression reguliere perl
Bonjour à tous,
j'essaye de faire mumuse avec un fichier de log apache.
Depuis peu sur PERL, j'ai du mal à réaliser une expression régulière.
Ex log:
XX.XX.XX.XX - - [04/Jan/2012:13:38:59 +0100] "GET /css/default.css HTTP/1.1" 200 860 "http://mformation.local/live.php" "Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC/Sensation/1.45.163.4 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
J'ai réussi à obtenir les IP, le code 200....,la date..
Mais je n'arrive pas à afficher le site visité.
ex: "http://mformation.local/live.php"
Quelqu'un peut-il me filer un ptit coup de main.
D'avance merci.
Hors ligne
#2 Le 09/07/2012, à 14:57
- pingouinux
Re : expression reguliere perl
Bonjour,
$ cat fichier
XX.XX.XX.XX - - [04/Jan/2012:13:38:59 +0100] "GET /css/default.css HTTP/1.1" 200 860 "http://mformation.local/live.php" "Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC/Sensation/1.45.163.4 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
$ grep -Po 'http[^"]*' fichier
http://mformation.local/live.php
Hors ligne
#3 Le 09/07/2012, à 15:00
- rahon93
Re : expression reguliere perl
Un grand merci à toi .
Cordialement, Rahon
Hors ligne
#4 Le 09/07/2012, à 22:19
- rahon93
Re : expression reguliere perl
Par contre, j'ai un autre soucis.
Cette commande permet de traiter le fichier dans son intégralité.
Mais impossible de l’utiliser dans une boucle qui va traiter ligne par ligne ce fichier.
ps: en plus, je l'ai intégré dans un package qui fait appel à ces fonctions.
Pour obtenir l'IP j'ai fais cela :
sub IP($){
my $maChaine = $_[0];
return($1) if $maChaine =~ /^([0-9.]{7,15})\ /;
}
D'avance merci...
Cdt,
Hors ligne
#5 Le 10/07/2012, à 10:06
- miniSeb
Re : expression reguliere perl
Pour le traitement ligne par ligne, c'est normal que les commandes proposées par pingouinux ne fonctionnent pas dans ton script en perl vu que ce sont des commandes externes ; mais l'essentiel de sa réponse était la regexp (http[^"]*).
Sinon, pourquoi fais-tu des sub ? Pour quelque chose d'aussi court, utilise plutôt des if...
#! /usr/bin/perl -w
use strict;
use warnings;
use File::Slurp; #Module qui facilite l'utilisation de fichiers // Voir CPAN
my @fichier = read_file($ARGV[0]);
foreach my $ligne (@fichier) {
my $ip = $& if $ligne =~ m/[0-9.]{7,15}/;
my $url = $& if $ligne =~ m/http[^"]+/;
#... Suite du traitement ...
}
Dernière modification par miniSeb (Le 10/07/2012, à 10:07)
Hors ligne
#6 Le 11/07/2012, à 00:17
- rahon93
Re : expression reguliere perl
lol.
Je suis entrain de faire des exos et dois maniper les fonctions et package c'est pour ca...
Je débute en PERL ...
Merci pour tout ainsi que Pingouix.
Cdt...
Hors ligne
Pages : 1