J'utilise assez peu grep, mais dans la doc ils utilisent soit un bloc {} soit une expression sous forme d'expression régulière. peut-être qu'en entourant le $date1 de // (/$date1/) ça marcherait mieux... mais je ne suis pas sûr. :-)
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
On Mon, 21 May 2006, bsdouille@numericable.fr wrote:
je cherche à savoir comment rechercher un mot ou une chaine de mots
avec grep
avec le/les mots en variable (je suis sous Unix)
J'utilise assez peu grep, mais dans la doc ils utilisent soit un bloc {}
soit une expression sous forme d'expression régulière. peut-être qu'en
entourant le $date1 de // (/$date1/) ça marcherait mieux... mais je ne
suis pas sûr. :-)
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
J'utilise assez peu grep, mais dans la doc ils utilisent soit un bloc {} soit une expression sous forme d'expression régulière. peut-être qu'en entourant le $date1 de // (/$date1/) ça marcherait mieux... mais je ne suis pas sûr. :-)
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Paul Gaborit
À (at) 21 May 2006 20:48:55 -0700, écrivait (wrote):
my @sortie = grep ($date1 , @auth) ;
Le premier argument de 'grep' est évaluée pour chaque élément. Or une chaîne de caractères non vide et ne contenant pas que "0" est toujours vraie. Donc @auth est conserver en totalité.
En mettant :
my @sortie = grep (m/Q$date1/, @auth);
ou plus lisiblement (à mon gout) :
my @sortie = grep {m/Q$date1/} @auth;
vous devriez obtenir le résultat escompté.
Le Q est là pour protéger d'éventuels méta-caractères de regexp qui seraient présents dans $date1.
PS: je ne fais pas de remarque sur le fait de lire tout le fichier auth.log en mémoire pour ensuite le filtrer...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) 21 May 2006 20:48:55 -0700,
bsdouille@numericable.fr écrivait (wrote):
my @sortie = grep ($date1 , @auth) ;
Le premier argument de 'grep' est évaluée pour chaque élément. Or une
chaîne de caractères non vide et ne contenant pas que "0" est toujours
vraie. Donc @auth est conserver en totalité.
En mettant :
my @sortie = grep (m/Q$date1/, @auth);
ou plus lisiblement (à mon gout) :
my @sortie = grep {m/Q$date1/} @auth;
vous devriez obtenir le résultat escompté.
Le Q est là pour protéger d'éventuels méta-caractères de regexp qui
seraient présents dans $date1.
PS: je ne fais pas de remarque sur le fait de lire tout le fichier
auth.log en mémoire pour ensuite le filtrer...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 21 May 2006 20:48:55 -0700, écrivait (wrote):
my @sortie = grep ($date1 , @auth) ;
Le premier argument de 'grep' est évaluée pour chaque élément. Or une chaîne de caractères non vide et ne contenant pas que "0" est toujours vraie. Donc @auth est conserver en totalité.
En mettant :
my @sortie = grep (m/Q$date1/, @auth);
ou plus lisiblement (à mon gout) :
my @sortie = grep {m/Q$date1/} @auth;
vous devriez obtenir le résultat escompté.
Le Q est là pour protéger d'éventuels méta-caractères de regexp qui seraient présents dans $date1.
PS: je ne fais pas de remarque sur le fait de lire tout le fichier auth.log en mémoire pour ensuite le filtrer...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Sébastien Cottalorda
je cherche à savoir comment rechercher un mot ou une chaine de mots avec grep avec le/les mots en variable (je suis sous Unix)
ce script me sort auth.log dans son entier ! je suis un peut perdu la :)
bsdouille
Salut,
une possibilité:
#!/usr/bin/perl -w use strict; my $date1 = `date | awk ' NR==1 {print ($2)" "($3) }'`; foreach (`cat /var/log/auth.log`){ print if (/$date1/); } #--------------------------------------- ou bien si tu tiens à stocker le résultat dans @sortie:
#!/usr/bin/perl -w use strict; my $date1 = `date | awk ' NR==1 {print ($2)" "($3) }'`; my @sortie; foreach (`cat /var/log/auth.log`){ push @sortie,$_ if (/$date1/); }
Evite de stocker le résultat de "cat /var/log/auth", dans un tableau, il peut devenir très grand en fonction de ton fichier. Dans ces 2 exemples, tu ne stocke que la ligne courante => moins gourmand. Sébastien
je cherche à savoir comment rechercher un mot ou une chaine de mots
avec grep
avec le/les mots en variable (je suis sous Unix)
ce script me sort auth.log dans son entier !
je suis un peut perdu la :)
bsdouille
Salut,
une possibilité:
#!/usr/bin/perl -w
use strict;
my $date1 = `date | awk ' NR==1 {print ($2)" "($3) }'`;
foreach (`cat /var/log/auth.log`){
print if (/$date1/);
}
#---------------------------------------
ou bien si tu tiens à stocker le résultat dans @sortie:
#!/usr/bin/perl -w
use strict;
my $date1 = `date | awk ' NR==1 {print ($2)" "($3) }'`;
my @sortie;
foreach (`cat /var/log/auth.log`){
push @sortie,$_ if (/$date1/);
}
Evite de stocker le résultat de "cat /var/log/auth", dans un tableau, il
peut devenir très grand en fonction de ton fichier.
Dans ces 2 exemples, tu ne stocke que la ligne courante => moins gourmand.
Sébastien
ce script me sort auth.log dans son entier ! je suis un peut perdu la :)
bsdouille
Salut,
une possibilité:
#!/usr/bin/perl -w use strict; my $date1 = `date | awk ' NR==1 {print ($2)" "($3) }'`; foreach (`cat /var/log/auth.log`){ print if (/$date1/); } #--------------------------------------- ou bien si tu tiens à stocker le résultat dans @sortie:
#!/usr/bin/perl -w use strict; my $date1 = `date | awk ' NR==1 {print ($2)" "($3) }'`; my @sortie; foreach (`cat /var/log/auth.log`){ push @sortie,$_ if (/$date1/); }
Evite de stocker le résultat de "cat /var/log/auth", dans un tableau, il peut devenir très grand en fonction de ton fichier. Dans ces 2 exemples, tu ne stocke que la ligne courante => moins gourmand. Sébastien
Benoit Izac
Bonjour,
le 22/05/2006 à 05:48, a écrit dans le message :
je cherche à savoir comment rechercher un mot ou une chaine de mots avec grep avec le/les mots en variable (je suis sous Unix)
ce script me sort auth.log dans son entier ! je suis un peut perdu la :)
On peut éviter des appels à des commandes externes :
#!/usr/bin/perl use warnings; use strict; use POSIX qw(strftime);
my $log = "/var/log/auth.log"; my $date = strftime("%B %d", gmtime(time));
open(LOG, "$log") or die("can't open $log: $!"); while (<LOG>) { print if (/^$date/); } close(LOG); __END__
-- Benoit Izac
bsdouille
<J'utilise assez peu grep, mais dans la doc ils utilisent soit un bloc {} <soit une expression sous forme d'expression régulière. peut-être qu'en <entourant le $date1 de // (/$date1/) ça marcherait mieux... mais je ne <suis pas sûr. :-)
bhé non cela ne marche pas :) mais pour le reste c'est ok ! il est vrai que de charger le fichier dans son entier peut faire lourd au bout d'un moment , donc j'ai pris la solution qui va bien :)
merci à vous tous :)
bsdouille
<J'utilise assez peu grep, mais dans la doc ils utilisent soit un bloc
{}
<soit une expression sous forme d'expression régulière. peut-être
qu'en
<entourant le $date1 de // (/$date1/) ça marcherait mieux... mais je
ne
<suis pas sûr. :-)
bhé non cela ne marche pas :)
mais pour le reste c'est ok !
il est vrai que de charger le fichier dans son entier peut faire lourd
au bout d'un moment ,
donc j'ai pris la solution qui va bien :)
<J'utilise assez peu grep, mais dans la doc ils utilisent soit un bloc {} <soit une expression sous forme d'expression régulière. peut-être qu'en <entourant le $date1 de // (/$date1/) ça marcherait mieux... mais je ne <suis pas sûr. :-)
bhé non cela ne marche pas :) mais pour le reste c'est ok ! il est vrai que de charger le fichier dans son entier peut faire lourd au bout d'un moment , donc j'ai pris la solution qui va bien :)