2 votes

Recherche dans un fichier en Perl

J'ai donc besoin de lire un fichier, de parcourir chaque ligne et de trouver où se trouve la chaîne ERROR. Voici ce que j'ai jusqu'à présent :

open(LOGFILE, "input.txt") or die "Can't find file";

$title = <LOGFILE>;

$\=' ' ;
while (<>){
    foreach $title(split){
        while (/^ERROR/gm){
            print "ERROR in line $.\n";
        }
    }
}
close LOGFILE;

Le problème que j'ai est qu'il ne regarde que le premier mot de chaque ligne. Donc, si l'entrée est

boo far ERROR

Il n'enregistre pas d'erreur. Toute aide serait grandement appréciée ! Je suis novice en perl, alors essayez de garder les choses simples. Merci !

6voto

kevlar1818 Points 1383

C'est une approche plus élégante, et j'ai corrigé le problème des regex. ^ correspond au début d'une ligne.

open(LOGFILE, "input.txt") or die "Can't find file";

while(<LOGFILE>) {
   print "ERROR in line $.\n" if(/ERROR/);
}
close LOGFILE;

Ou encore à partir de la ligne de commande :

perl -n -e 'print "ERROR in line $.\n" if(/ERROR/);' input.txt

-n boucle implicitement pour toutes les lignes d'entrée -e exécute une ligne de code

Pour sortir vers un fichier :

perl -n -e 'print "ERROR in line $.\n" if(/ERROR/);' input.txt > output.txt

Bien que ce soit un bon exemple simple d'utilisation de Perl, si vous utilisez un shell Unix, grep fait ce que vous voulez sans avoir besoin de script (merci à TLP dans les commentaires du PO) :

grep -n ERROR input.txt > output.txt

Il s'agit en fait d'imprimer la ligne correspondante elle-même, avec son numéro de ligne.

1voto

Oleg V. Volkov Points 9724

Bien sûr que non, car ^ devant votre regexp signifie "début de ligne". Enlevez-le et vous obtiendrez ERROR n'importe où. Vous ne devriez pas non plus faire d'astuces de fractionnement. Vous avez besoin de trouver ERROR n'importe où ? Alors écrivez simplement ceci :

while (<>){
   if (/ERROR/){
      print "ERROR in line $.\n";
   }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X