#!/usr/bin/perl #On affecte le contenu de la variable $ARGV[0] (Correspond au premier élément contenu dans le tableau @ARGV, c'est à dire au premier paramètre qui se trouve sur la ligne de commande) à la variable $fichier $fichier=$ARGV[0]; #On supprime le dernier caractère contenu dans la variable $fichier seulement si celui-ci est un retour à la ligne chomp ($fichier); #Si la condition entre parenthèse n'est pas réalisée, on exécute le bloc unless (-f $fichier) { #On affiche "Le fichier $fichier n'existe pas." print "Le fichier \033[1;34;40m",$fichier,"\033[00m n'existe pas.\n"; } else { #On affiche "Saisissez le mot a chercher : " print "Saisissez le mot a chercher : "; #On affecte à la variable $mot le contenu de l'entrée standard <STDIN> (Pointeur qui permet de lire le flux d'entrée au clavier) $mot=<STDIN>; chomp ($mot); #Si le contenu de la variable $mot est égal à rien, on exécute le bloc d'instructions if ($mot eq "") { #On affiche "Vous n'avez pas donne de mot a chercher." print "Vous n'avez pas donne de mot a chercher.\n"; } #Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions else { #On ouvre en lecture le fichier dont le nom est contenu dans la variable $fichier et on le référence sous le nom FICHIERENTREE open(FICHIERENTREE, "$fichier"); #On crée un compteur $compteur et on l'initialise à 0 $compteur=0; #On crée un compteur $compteurlignes et on l'initialise à 0 $compteurlignes=0; #On crée un compteur $compteurmots et on l'initialise à 0 $compteurmots=0; #Tant qu'on peut associer une ligne du fichier référencé sous le nom FICHIERENTREE à la variable $ligne, on exécute le bloc d'instructions while ($ligne=<FICHIERENTREE>) { #On incrémente le compteur $compteur ++$compteur; #Pour chaque ligne contenue dans la variable $ligne qui contient le mot contenu dans la variable $mot, on exécute le bloc d'instructions foreach ($ligne=~/\b$mot\b/i) { #On incrémente le compteur $compteurlignes ++$compteurlignes; #On affiche un espace, suivi du contenu de la variable $compteur et suivi d'une tabulation print " ",$compteur,"\t"; #On supprime le dernier caractère contenu dans la variable $ligne seulement si celui-ci est un retour à la ligne chomp ($ligne); #On sépare (Grâce aux espaces) les mots contenus dans la variable $ligne et on les affecte au tableau @mots @mots=split(/ /,$ligne); #Pour chaque élément du tableau @mots qu'on affecte à la variable $word, on exécute le bloc d'instructions foreach $word (@mots) { #Si le contenu de la variable $word contient le mot contenu dans la variable $mot, on exécute le bloc d'instructions if ($word=~/\b$mot\b/i) { #On incrémente le compteur $compteurmots ++$compteurmots; #On affecte à la variable $m le mot recherché (Contenu dans la variable $&) qu'on colore en rouge $m="\033[1;34;40m".$&."\033[00m"; #On affecte à la variable $gauche la chaîne de caractères qui se trouve à gauche du mot recherché (Contenu dans la variable $`) $gauche=$`; #On affecte à la variable $droite la chaîne de caractères qui se trouve à droite du mot recherché (Contenu dans la variable $') $droite=$'; #On affiche le contenu de la variable $gauche, suivi du contenu de la variable $m, suivi du contenu de la variable $droite et suivi d'un espace print $gauche.$m.$droite." "; } #Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions else { #On affiche le contenu de la variable $word suivi d'un espace print $word." "; } } #On retourne à la ligne print "\n"; } } #Si le contenu de la variable $compteurmots est égal à 0, on exécute le bloc d'instructions if ($compteurmots==0) { #On affiche "Le mot ", suivi en rouge du contenu de la variable $mot, suivi de " n'a pas ete trouve dans le fichier ", suivi en vert du contenu de la variable $fichier et suivi d'un point print "\nLe mot \033[1;34;40m",$mot,"\033[00m n'a pas ete trouve dans le fichier \033[32m",$fichier,"\033[00m.\n\n"; } #Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions else { #On affiche "Le mot ", suivi en rouge du contenu de la variable $mot, suivi de " est present ", suivi en bleu du contenu de la variable $compteurmots et de " fois", suivi de " dans ", suivi en bleu du contenu de la variable $compteurlignes et de " lignes", suivi de " du fichier ", suivi en vert du contenu de la variable $fichier et suivi d'un point print "\nLe mot \033[1;34;40m",$mot,"\033[00m est present \033[34m",$compteurmots," fois\033[00m dans \033[34m",$compteurlignes," lignes\033[00m du fichier \033[31m",$fichier,"\033[00m.\n\n"; } close(FICHIERENTREE); } }