GREP.EXE, l'utilitaire de recherche de texte
Remonter à Utilitaires de ligne de commande - Index
GREP (Global Regular Expression Print) est un puissant programme de recherche de texte dérivé de l'utilitaire UNIX du même nom. GREP recherche un texte dans un ou plusieurs fichiers ou dans le flux d'entrée standard.
Sommaire
Utilisation de GREP
Voici un exemple succinct de situation dans laquelle il peut être intéressant d'utiliser GREP. Supposons que vous souhaitiez savoir quels sont les fichiers texte de votre répertoire en cours qui contiennent la chaîne Bob
. Vous pourriez taper :
grep Bob *.txt
GREP répond en affichant la liste des lignes de chaque fichier (s'il en existe) qui contiennent la chaîne Bob
. Comme, par défaut, GREP n'ignore pas la casse, les chaînes bob
et boB
ne correspondent pas.
GREP peut faire beaucoup plus que rechercher une chaîne fixe simple. GREP peut être utilisé pour rechercher toute chaîne correspondant à un motif particulier. Voir la section La chaîne de recherche de cette rubrique.
Syntaxe de la ligne de commande
La syntaxe générale de la ligne de commande GREP est
grep [-<options>] <searchstring> [<files(s)>...]
Eléments de la ligne de commande
Option | Description |
---|---|
<options> |
Se compose d'une ou plusieurs lettres précédées d'un tiret |
<searchstring> |
Donne le motif recherché. |
<file(s)> |
Indique à GREP quels sont les fichiers dans lesquels la recherche doit s'effectuer. Les fichiers peuvent être indiqués sous la forme de noms de fichier explicites ou de noms de fichier génériques incorporant les caractères génériques |
Pour afficher la liste des options de la ligne de commande GREP, les caractères spéciaux et les valeurs par défaut de GREP, entrez :
grep ?
Options de la ligne de commande
Vous pouvez passer des options à l'utilitaire GREP sur la ligne de commande, en spécifiant un ou plusieurs caractères précédés d'un tiret -
. Chacun de ces caractères est un commutateur que vous pouvez activer ou désactiver : un symbole plus +
après un caractère active l'option, un tiret -
après le caractère désactive l'option. Le signe +
est facultatif ; par exemple, -r
a la même signification que -r+
.
Vous pouvez spécifier plusieurs options séparément (comme -i -d -l
) ou bien les associer (comme -ild
ou -il
, -d
, et ainsi de suite).
GREP supporte les options de ligne de commande listées dans le tableau suivant :
Options de la ligne de commande GREP
Option | Description |
---|---|
? |
Affiche un écran d'aide montrant les options, les caractères spéciaux et les valeurs par défaut de GREP. |
-c- |
Compte uniquement : Affiche seulement le nombre des lignes satisfaisant le critère de recherche. Pour chaque fichier contenant au moins une ligne répondant au critère, GREP affiche le nom du fichier avec le nombre de lignes répondant au critère de recherche. Les lignes correspondantes ne sont pas affichées. |
-d- |
Recherche dans les sous-répertoires : Pour chaque spécification de fichier sur la ligne de commande, GREP recherche tous les fichiers correspondant à la spécification, à la fois dans le répertoire indiqué et dans tous ses sous-répertoires. Si vous ne spécifiez qu'un nom de fichier sans chemin d'accès, GREP suppose que les fichiers se trouvent dans le répertoire en cours. |
-e |
L'expression de recherche suit : Indique que le prochain argument est l'expression de recherche. Cette option est utile lorsqu'on recherche une expression commençant par |
-i- |
Ignorer la casse : GREP ignore les différences entre majuscules et minuscules. Quand cette option est activée, GREP traite toutes les lettres de |
-l- |
Ne liste que les noms de fichiers : N'affiche que le nom de chaque fichier contenant une correspondance. Après avoir trouvé une correspondance, GREP affiche le nom du fichier et le traitement passe immédiatement au fichier suivant. |
-n- |
Numéros de ligne : Chaque ligne répondant au critère de recherche qui est affichée par GREP est préfixée par son numéro. |
-o- |
Format de sortie UNIX : Change le format de sortie des lignes correspondantes pour prendre en charge plus facilement les canaux de lignes de commandes de style UNIX. Toutes les lignes de sortie sont préfixées par le nom du fichier contenant la ligne correspondante. |
-r+ |
Recherche d'expression régulière : Le texte défini par
|
-u <filename> |
Mise à jour des options : Crée une copie de GREP.EXE, appelée |
-v- |
Non-correspondance : Imprime seulement les lignes non concordantes. Seules les lignes qui ne contiennent pas la chaîne de recherche sont considérées comme des lignes non concordantes. |
-w- |
Recherche de mot : Le texte trouvé qui correspond à l'expression régulière n'est considéré comme une correspondance valide que si le caractère qui le précède immédiatement et celui qui le suit immédiatement ne peuvent pas faire partie d'un mot. Le jeu de caractères par défaut pour les mots inclut les lettres |
-z- |
Mode verbeux : GREP affiche le nom de chaque fichier faisant l'objet d'une recherche. Chaque ligne répondant au critère de recherche est préfixée par son numéro. Le nombre de lignes correspondantes dans chaque fichier est affiché, même s'il vaut zéro. |
La chaîne de recherche
La valeur de <searchstring>
définit le motif recherché par GREP. Une chaîne de recherche peut être une expression régulière ou une chaîne littérale.
- Dans une expression régulière, certains caractères ont des significations particulières : il s'agit d'opérateurs permettant de contrôler la recherche. Une expression régulière est un caractère unique ou un ensemble de caractères entre crochets. Une concaténation d'expressions régulières est une expression régulière.
- Dans une chaîne littérale, il n'y a pas d'opérateurs : chaque caractère est traité de façon littérale.
La chaîne de recherche peut être encadrée par des guillemets pour empêcher que les espaces et les tabulations ne soient traités comme des délimiteurs. Pour rechercher une expression qui commence par -
, utilisez l'option -e
. Le texte spécifié par le chaîne de recherche ne peut pas s'étendre sur deux lignes ; cela signifie que tout le texte nécessaire à la recherche du motif doit se trouver sur une même ligne.
Quand vous utilisez l'option -r
(activée par défaut), la chaîne de recherche est traitée comme une expression régulière (et non comme une expression littérale).
Caractères spéciaux
Les caractères suivants ont des significations particulières :
Symbole | Description |
---|---|
^ |
Un accent circonflexe placé au début d'une expression correspond au début d'une ligne. |
$ |
Le signe dollar placé à la fin de l'expression correspond à la fin d'une ligne. |
. |
Un point correspond à n'importe quel caractère. |
* |
Un astérisque placé après un caractère correspond à un nombre quelconque d'occurrences de ce caractère suivi de n'importe quel nombre de caractères (y compris par aucun caractère). Par exemple, |
+ |
Le signe plus placé après un caractère correspond à un nombre quelconque d'occurrences de ce caractère suivi de n'importe quel nombre de caractères (à l'exception de zéro caractère). Par exemple, |
{} |
Les caractères ou expressions entre accolades sont groupés afin que l'évaluation d'un motif de recherche puisse être contrôlée et que le texte groupé puisse être désigné par un nombre. |
[] |
Les caractères placés entre crochets permettent de trouver l'un des caractères placés entre crochets, mais pas les autres. Par exemple |
[^] |
Un accent circonflexe placé au début d'une chaîne entre crochets signifie SAUF. Ainsi, |
[-] |
Un trait d'union placé à l'intérieur des crochets indique une plage de caractères. Par exemple, |
\ |
Une barre oblique inverse avant un caractère générique indique à GREP de traiter ce caractère littéralement, et non comme un caractère générique. Par exemple, |
Quatre des caractères "spéciaux" ($
, .
, *
et +
) n'ont pas de signification spéciale quand ils sont utilisés entre crochets. De plus, le caractère <code>^</code> n'est considéré comme un caractère spécial que s'il suit immédiatement le début de la définition d'ensemble (immédiatement après le délimiteur [
).
Exemples GREP
Exemple 1 -- Redirection de la sortie à partir de GREP
Si les résultats produits par une commande GREP dépassent la hauteur de l'écran, vous pouvez rediriger la sortie dans un fichier.
Vous pouvez, par exemple, utiliser la commande suivante :
GREP "Bob" *.txt > temp.txt
Cette commande recherche une chaîne dans tous les fichiers d'extension TXT du répertoire en cours puis place le résultat dans un fichier nommé TEMP.TXT. Vous pouvez donner à ce fichier le nom que vous souhaitez. Pour lire TEMP.TXT (le résultat de la recherche), utilisez n'importe quel traitement de texte.
Exemple 2
grep -r "[^a-z]main\ *\(" *.c
Correspond :
main(i,j:integer) if (main ()) halt; if (MAIN ()) halt;
Ne correspond pas :
mymain()
Explication : La chaîne de recherche ordonne à GREP de rechercher le mot "main" qui ne soit pas précédé de lettres minuscules [^a-z]
, mais suivi de zéro ou plusieurs occurrences d'espaces \ *
, puis d'une parenthèse gauche. Comme les espaces et les tabulations sont normalement considérés comme des délimiteurs de lignes de commandes, il faut les spécifier comme caractères littéraux pour les inclure dans une expression régulière.
Exemple 3
grep -ri [a-c]:\\data\.fil *.c *.inc
Correspond :
A:\data.fil B:\DATA.FIL c:\Data.Fil
Ne correspond pas :
d:\data.fil a:data.fil
Explication : Comme les caractères barre oblique inverse \
et point .
ont généralement une signification particulière dans les chemins d'accès et les noms de fichier, il faut les faire précéder du caractère d'échappement barre oblique inverse pour les rechercher. On utilise ici l'option -i
de sorte que la recherche n'est pas sensible à la casse.
Exemple 4
grep "search string with spaces" *.doc *.c
Correspond :
A search string with spaces in it.
Ne correspond pas :
This search string has spaces in it.
Explication : Cet exemple montre comment rechercher une chaîne contenant un texte particulier.
Exemple 5
grep -rd "[ ,.:?'\"]"$ \*.doc
Correspond :
He said hi to me. Where are you going? In anticipation of a unique situation, Examples include the following: "Many men smoke, but fu man chu."
Ne correspond pas :
He said "Hi" to me Where are you going? I'm headed to the
Explication : Cet exemple recherche les caractères " . : ? '
et ,
à la fin d'une ligne. Le guillemet à l'intérieur des crochets est précédé d'un caractère d'échappement afin d'être traité comme un caractère normal et non comme le guillemet de fin de la chaîne. De plus, le caractère $
apparaît en dehors des crochets. Cela montre comment il est possible de concaténer des expressions régulières pour former une expression plus longue.
Exemple 6
grep -w[=] = *.c
Correspond :
i = 5; j=5; i += j;
Ne correspond pas :
if (i == t) j++; /* ==================================== */
Cet exemple redéfinit l'ensemble en cours des caractères valides pour un mot par l'opérateur d'affectation =
uniquement, puis effectue une recherche de mots. Les instructions d'affectation C qui utilisent un signe égal unique =
, correspondent, mais pas les tests d'égalité qui utilisent un signe égal double ==
.