Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
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.
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
]
.
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.
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.
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
.
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.
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, ecrit en Perl, est un logiciel defini comme ≪ ack, mieux que grep, un outil de recherche puissant pour programmeurs ≫
[
8
]
:
- ↑
Computerphile
, ≪
Where GREP Came From - Computerphile
≫,
(consulte le
)
- ↑
a
b
c
et
d
≪
regular expression - What is the difference between `grep`, `egrep`, and `fgrep`?
≫, sur
Unix & Linux Stack Exchange
(consulte le
)
- ↑
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.
- ↑
(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).
- ↑
(en)
Message sur la liste email de freebsd
, de Mike Haertel expliquant pourquoi GNU grep est rapide (
Liste email freebsd
, le 21 aout 2010 ).
- ↑
(en)
Le bulletin GNU de Janvier 1987
, section "Statut du projet GNU", cite grep dans les outils disponible (
Bulletin Gnu
, le 3 janvier 1987).
- ↑
(en)
L'utilitaire Grep du projet GnuWin32
.
- ↑
(en)
ack
, un grep pour les programmeurs.