- grep
-
grep est un programme en ligne de commande de recherche de chaînes de caractères, initialement écrit pour UNIX par Ken Thompson, puis amélioré par l'utilisation de l'algorithme d'Aho-Corasick.
Il existe de nombreuses implémentations grep sur différents systèmes, parmi lesquelles GNU grep.
Sommaire
Origine du nom
Historiquement, le nom provient de l'une des commandes de l'éditeur de texte ed disponible sur UNIX, dont la syntaxe est :
:g/re/p
Cette commande signifie : « rechercher globalement les correspondances avec l'expression rationnelle (en anglais, regular expression), et imprimer (print) les lignes dans lesquelles elle correspond ». Par défaut, grep se comporte très exactement comme cette commande. Toutefois, de nombreuses options en ligne de commande permettent de changer son comportement.
D'après d'autres sources, le nom grep serait en fait l'acronyme de General Regular Expression Processor, ce qui signifie « Processeur d'Expressions Rationnelles Générique ».
Caractéristiques techniques
Le comportement habituel de grep est de recevoir une expression rationnelle en ligne de commande, de lire les données sur l'entrée standard ou dans une liste de fichiers, et d'écrire les lignes qui contiennent des correspondances avec l'expression rationnelle sur la sortie standard. Cette commande est très répandue sous tous les systèmes Linux/Unix.
grep est un filtre, ce qui lui permet d'être combiné avec d'autres commandes, sous la forme d'un pipeline.
Ses performances et sa facilité d'emploi en font un outil adapté pour rechercher efficacement des chaines dans une arborescence complexe de fichiers. Il est par exemple utilisé pour trouver toutes les occurrences du nom d'une fonction dans le code source d'un programme ou de chaines dans des fichiers de configuration. Malgré la présence de fonctionnalités similaires dans de nombreux programmes, comme emacs ou vi, de nombreux utilisateurs préfèrent utiliser directement grep, même lorsqu'ils sont en train d'utiliser ces programmes.
Variantes
Il existe de nombreux dérivés de grep. Parmi eux :
- agrep, pour approximate grep, c'est-à-dire grep approximatif, qui facilite la recherche de chaîne approchées ;
- fgrep, pour des recherches avec des motifs fixés ;
- egrep, pour les recherches nécessitant une syntaxe d'expressions rationnelles plus sophistiquée ;
- rgrep, pour une recherche dans tous les fichiers d'un répertoire
- zgrep, pour une recherche dans un fichier compressé
- Tcgrep, qui est une réécriture de grep et qui utilise les expressions rationnelles de Perl.
La plupart de ces variantes de grep ont été portées sur de nombreux systèmes d'exploitations. On parle alors d'implémentation moderne de grep.
De nombreuses autres commandes contiennent le mot « grep ». Par exemple, l'utilitaire pgrep affiche le numéro des processus dont le nom correspond avec l'expression rationnelle.
Implémentations
Implémentations traditionnelles
Implémentations modernes
- OpenBSD grep
- GNU grep
Utilisation dans la langue courante
Bien que construit comme un acronyme, « grep » est un mot prononçable, en français comme en anglais. Les utilisateurs anglophones de grep utilisent souvent son nom comme un verbe, qui signifie « chercher quelque chose dans un fichier », comme on le ferait avec l'utilitaire grep. L'objet direct désigne alors les fichiers dans lesquels il faut chercher : "Kibo grepped his Usenet spool for his name." (qui signifie : « Kibo a recherché son nom dans son spool Usenet »). En français, le mot est plus rarement utilisé comme un verbe du premier groupe : « greppe les logs pour voir si le serveur a reçu ta demande. »
Par extension, le mot « grep » est aussi devenu un synonyme des expressions rationnelles elles-mêmes. De nombreux éditeurs ou traitements de texte proposent aujourd'hui des fonctionnalités de recherche à l'aide d'expressions rationnelles, qu'ils désignent souvent par « outil grep » ou « mode grep », dans lequel des motifs grep peuvent être saisis. Cette imprécision est source de confusion, en particulier dans les environnements non-UNIX.
Équivalents
Équivalent de grep sous Windows : la commande find
La commande find de Windows réalise les fonctions les plus basiques de grep. Par exemple, la commande find "partition" c:\b* affichera les lignes du fichier boot.ini qui contiennent le mot partition.
la commande find met %errorlevel% à 0 si la chaine est trouvée, à 1 autrement ; le code suivant recherche la chaine "texte" dans le fichier document.txt :
find /I "texte" document.txt if "%errorlevel%" == "1" goto non_trouve echo la chaine a été trouvée goto fin :non_trouve echo chaine non trouvée :fin
Pour avoir le même grep sous Windows, il faut soit installer cygwin ou plus simplement le grep du projet GnuWin32[1]. On peut également trouver une version adaptée sur le site de Tim Charron (voir les liens externes plus bas).
Équivalent de grep sous IOS: la commande include
La commande include de Cisco IOS réalise les fonctions les plus basiques de grep. Par exemple, la commande show running-config | include 192.168.1.1 affichera les lignes de la configuration active qui contiennent l'adresse 192.168.1.1.
Ack, grep pour programmeurs
- ack, écrit en Perl est un logiciel défini comme "ack, mieux que grep, un outil de recherche puissant pour programmeurs"[2]:
- Il ignore les fichiers inutiles, tels les fichiers des logiciels de gestion de versions ou les fichiers de sauvegarde des éditeurs de texte.
- l'utilisation en ligne de commande est plus courte comparée à celle de grep
- On peut utiliser les expressions régulières de Perl, moins limitées que celles de grep
Voir aussi
Articles connexes
Liens externes
- (fr) Le Man officiel de GREP en français
- (en) Une version de grep portée sous Windows par Tim Charron
Références
- (en) L'utilitaire Grep du projet GnuWin32
- (en) ack, un grep pour les programmeurs
Wikimedia Foundation. 2010.