한국   대만   중국   일본 
grep ? Wikipedia Aller au contenu

grep

Un article de Wikipedia, l'encyclopedie libre.

Grep

Description de l'image Grep example.png.
Informations
Createur Ken Thompson Voir et modifier les données sur Wikidata
Premiere version Voir et modifier les données sur Wikidata
Systeme d'exploitation Unix et type Unix Voir et modifier les données sur Wikidata
Type Utilitaire UNIX ( d ) Voir et modifier les données sur Wikidata

grep est un programme en ligne de commande de recherche de chaines de caracteres , initialement ecrit pour UNIX par Ken Thompson , puis ameliore par l'utilisation de l' algorithme d'Aho-Corasick .

Il existe de nombreuses implementations de grep sur differents systemes , en particulier sous tous les systemes de type UNIX . Une des implementations les plus repandues est GNU grep.

Origine du nom [ modifier | modifier le code ]

Historiquement, le nom provient de l'une des commandes de l' editeur de texte ed disponible sur UNIX, dont la syntaxe est :

:g/
re
/p

Cette commande signifie : ≪ rechercher g lobalement les correspondances avec l' expression rationnelle (en anglais, r egular e xpression ), et imprimer ( p rint ) les lignes dans lesquelles elle correspond ≫. Par defaut, grep se comporte tres exactement comme cette commande. Toutefois, de nombreuses options en ligne de commande permettent de changer son comportement [ 1 ] .

Caracteristiques techniques [ modifier | modifier le code ]

Le comportement habituel de grep est de recevoir une expression rationnelle en argument, de lire les donnees sur l' entree standard ou dans une liste de fichiers, et d'ecrire les lignes qui contiennent des correspondances avec l'expression rationnelle sur la sortie standard.

Par exemple, grep permet de chercher les lignes contenant le nom Durand dans un fichier de contacts telephoniques :

$
 grep
 Durand
 ListeNumeros.txt

ne renverra que les lignes contenant Durand  :

 Guenole
 Durand,
 0723237694

 Bernard
 Durand,
 0966324355

grep est un filtre , ce qui lui permet d'etre combine avec d'autres commandes, sous la forme d'un pipeline .

Ses performances et sa facilite d'emploi en font un outil adapte pour rechercher efficacement des chaines dans une arborescence complexe de fichiers. Il est par exemple utilise 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. Malgre la presence de fonctionnalites similaires dans de nombreux programmes, comme Emacs ou vi , de nombreux utilisateurs preferent utiliser directement grep, meme lorsqu'ils sont en train d'utiliser ces programmes.

La commande grep est limitee a certains aspects des caracteres. Par exemple, elle ne permet pas de faire des recherches dans des fichiers encodes en UTF-16. Les recherches sont cependant possibles si le fichier a prealablement ete converti au format UTF-8 . La prise en charge du format UTF-8 ne se fait cependant qu'en considerant chaque caractere comme une sequence d'octets.

Variantes [ modifier | modifier le code ]

Il existe de nombreux derives de grep. Parmi eux :

  • agrep , pour approximate grep , c'est-a-dire grep approximatif , qui facilite la recherche de chaines approchees ;
  • fgrep , (equivalent a grep -F ) pour des recherches de texte brut (sans expressions regulieres) [ 2 ]  ;
  • egrep , (equivalent a grep -E ) pour les recherches necessitant une syntaxe d'expressions rationnelles plus sophistiquee (expressions rationnelles etendues ) [ 2 ]  ;
  • rgrep , (equivalent a grep -r ) pour une recherche dans tous les fichiers d'un repertoire recursivement [ 2 ]  ;
  • zgrep , pour une recherche dans un ou des fichiers compresses ;
  • tcgrep , (semblable a mais different de grep -P ) [ 3 ] qui est une reecriture de grep et qui utilise les expressions rationnelles de Perl .

A noter que grep egrep fgrep et rgrep etaient distribuees en plusieurs fichiers binaires separees sur certaines versions d'Unix, c'est pourquoi elles sont encore souvent accessibles. Mais en realite, elles ont aujourd'hui exactement les memes effets que les differentes options de grep [ 2 ] .

La plupart de ces variantes de grep ont ete portees sur de nombreux systemes d'exploitation. On parle alors d'implementation moderne de grep.

De nombreuses autres commandes contiennent le mot ≪ grep ≫. Par exemple, l'utilitaire pgrep affiche le numero des processus dont le nom correspond a l'expression rationnelle.

Implementations [ modifier | modifier le code ]

GNU grep [ modifier | modifier le code ]

GNU grep est l'implementation de la commande UNIX grep par le projet GNU lance par Richard Stallman dans les annees 1980 [ 4 ] . C'est un logiciel libre distribue selon les termes de la licence publique generale GNU .

La commande grep est initialement ecrite pour UNIX par Ken Thompson . Dans le cadre du projet GNU , Mike Haerkal [ 5 ] , implementera grep en logiciel libre avant la fin des annees 1980 [ 6 ] .

L'implementation grep du projet GNU est aujourd'hui largement utilisee, par les systemes Linux , FreeBSD , mais aussi Mac OS X .

Utilisation dans la langue courante [ modifier | modifier le code ]

En tant qu' acronyme , ≪ grep ≫ est un mot prononcable, en francais 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 designe alors les fichiers dans lesquels il faut chercher : ≪  Kibo grepped his Usenet spool for his name.  ≫ (qui signifie : ≪ Kibo a recherche son nom dans son spool Usenet . ≫). En francais, le mot est plus rarement utilise comme un verbe du premier groupe : ≪ greppe les logs pour voir si le serveur a recu ta demande. ≫

Par extension, le mot ≪ grep ≫ est aussi devenu un synonyme des expressions rationnelles elles-memes. De nombreux editeurs ou traitements de texte proposent aujourd'hui des fonctionnalites de recherche a l'aide d'expressions rationnelles, qu'ils designent souvent par ≪ outil grep ≫ ou ≪ mode grep ≫, dans lequel des motifs grep peuvent etre saisis. Cette imprecision est source de confusion, en particulier dans les environnements non-UNIX.

Equivalents [ modifier | modifier le code ]

Equivalent de grep sous Windows : la commande findstr [ modifier | modifier le code ]

La commande findstr de Windows est en fait un QGrep, un GREP adapte a windows. Il prend en charge les expressions regulieres mais sa syntaxe differe legerement de grep.

Pour disposer du meme grep sous Windows, il faut soit installer cygwin ou plus simplement le grep du projet GnuWin32 [ 7 ] . On peut egalement trouver une version adaptee sur le site de Tim Charron (voir les liens externes plus bas).

Equivalent de grep sous IOS : la commande include [ modifier | modifier le code ]

La commande include de Cisco IOS realise 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 [ modifier | modifier le code ]

ack, ecrit en Perl, est un logiciel defini comme ≪ ack, mieux que grep, un outil de recherche puissant pour programmeurs ≫ [ 8 ]  :

Voir aussi [ modifier | modifier le code ]

Articles connexes [ modifier | modifier le code ]

Liens externes [ modifier | modifier le code ]

References [ modifier | modifier le code ]

  1. Computerphile , ≪  Where GREP Came From - Computerphile  ≫, (consulte le )
  2. a b c et d ≪  regular expression - What is the difference between `grep`, `egrep`, and `fgrep`?  ≫, sur Unix & Linux Stack Exchange (consulte le )
  3. Manuel de grep
    -P, --perl-regexp
        Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of unimplemented features.
    
  4. (en) Thomas Lord , ancien hacker du projet GNU et employe a l'origine par la FSF cite l'implementation en logiciel libre de grep comme tache prioritaire du projet ( O'Reilly Broadcast , le 27 avril 2009).
  5. (en) Message sur la liste email de freebsd , de Mike Haertel expliquant pourquoi GNU grep est rapide ( Liste email freebsd , le 21 aout 2010 ).
  6. (en) Le bulletin GNU de Janvier 1987 , section "Statut du projet GNU", cite grep dans les outils disponible ( Bulletin Gnu , le 3 janvier 1987).
  7. (en) L'utilitaire Grep du projet GnuWin32 .
  8. (en) ack , un grep pour les programmeurs.