Merci Patrice, mais non, le seul délimiteur que j'ai est la ligne vide entre
les blocs, il existe en fait de nombreux type de blocs différents pouvant
comporter a n'importe quel endroit une information qui les lie entre eux
(adresse ip, nom d'utilisateur, realm, etc)...
Cependant, le script perl proposé par Jean-Luc répond parfaitement a mon
problème.
Jean-Michel.
Le 26 juin 2008 09:58, Patrice Karatchentzeff <
patrice.karatchentzeff@???> a écrit :
> Le 25 juin 2008 15:47, Jean-Michel Bonnefond <pompon2@???> a écrit :
> >
> > Bonjour a tous,
> >
> > Je souhaiterai écrire une petit programe probablement en bash, perl, awk
> ou
> > autre peu importe, qui me permette d'afficher un fichier de log de facon
> > selective.
> >
> > Il s'agit de logs radius qui se présentent par blocs, exemple :
> >
> > Packet-Type = Access-Request
> > Thu Jun 24 23:58:07 2008
> > User-Name = "jp1234@???"
> > User-Password = "******"
> > NAS-IP-Address = 192.168.20.1
> > Framed-IP-Address = 192.168.30.2
> > NAS-Identifier = "Virtual-NASMONITOR"
> > Proxy-State = 0x3932
> > Client-IP-Address = 199.33.33.199
> >
> > Packet-Type = Access-Accept
> > Thu Jun 24 23:58:07 2008
> > NAS-IP-Address = 192.168.20.1
> > Client-IP-Address = 199.33.33.199
> > Realm = "dummy.fr"
> >
> > Je voudrais afficher en temps réel dans un terminal (l'equivalent d'un
> "tail
> > -f "), ou stocker dans un fichier tous les blocs qui contiennent un
> pattern
> > particulier, par exemple une adresse ip précise.
> >
> > Mon probleme c'est d'afficher le bloc complet, les blocs étant séparé par
> > une ligne vide et la valeur recherhé pouvant se situer a n'importe quel
> > endroit du bloc, qui n'a de plus pas une longueur fixe.
>
> Ce n'est pas clair ton truc : ton exemple ci-dessus vaut quoi ? C'est
> un extrait ou tout le log est déjà partitionné en block (auquel cas ça
> répond à ta question).
>
> Si je comprends bien tu veux ne sortir que les blocks et ils
> commencent tous par Packet-Type et ils finissent par une ligne vide ?
>
> Si c'est le cas, c'est relativement trivial :
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> my $block = "0";
>
> while(<>) {
> $block = "1" if ( /^Packet-Type/ );
> $block = "0" if ( /^$/ );
> print if ( $block eq "1" );
> };
>
> PK
>
> --
> |\ _,,,---,,_ Patrice KARATCHENTZEFF
> ZZZzz /,`.-'`' -. ;-;;,_ mailto:p.karatchentzeff@free.fr
> |,4- ) )-,_. ,\ ( `'-' http://p.karatchentzeff.free.fr
> '---''(_/--' `-'\_)
>
>