Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile.

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 ? hmm 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 smile...
Merci pour tout ainsi que Pingouix.

Cdt...

Hors ligne