GREP.EXE, l'utilitaire de recherche de texte

De RAD Studio
Aller à : navigation, rechercher

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.

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 -, qui changent le comportement de GREP.

<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 ? et *. Vous pouvez par ailleurs taper un chemin (informations de lecteur et de répertoire). Si vous listez les fichiers sans chemin, GREP effectue sa recherche dans le répertoire en cours.
Si vous ne spécifiez pas de fichier, GREP recherche dans l'entrée standard. Vous pouvez ainsi utiliser les canaux (barres verticales |) et la redirection (symbole "supérieur à" >).


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.
Cette option est désactivée par défaut.

-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.
Cette option est désactivée par défaut.

-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 a à z comme si elles étaient identiques aux lettres A à Z correspondantes, dans toutes les situations.
Cette option est désactivée par défaut.

-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.
Cette option est désactivée par défaut.

-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.
Cette option est désactivée par défaut.

-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.
Cette option est désactivée par défaut.

-r+

Recherche d'expression régulière : Le texte défini par searchstring est traité comme une expression régulière et non comme une chaîne littérale.
Cette option est activée par défaut.
Une expression régulière peut contenir une ou plusieurs occurrences d'un ou plusieurs caractères éventuellement encadrés par des guillemets.
Les symboles suivants ont une signification spéciale (pour de plus amples informations, voir la section Caractères spéciaux de cette rubrique) :

  • ^ -- début de ligne
  • . -- n'importe quel caractère
  • * -- correspond à zéro, un ou plusieurs caractères
  • [aeiou0-9] -- correspond à a, e, i, o, u, et 0-9
  • [^aeiou0-9] -- correspond à tous les caractères, à l'exception de a, e, i, o, u, et 0-9
  • $ -- fin de ligne
  • \ -- caractère suivant considéré littéralement
  • + -- au moins un caractère
-u <filename>

Mise à jour des options : Crée une copie de GREP.EXE, appelée <filename>.EXE. Les options de la ligne de commande sont enregistrées comme valeurs par défaut dans la nouvelle copie de GREP. Utilisez l'option -u pour personnaliser les paramètres par défaut des options. Pour vérifier que les valeurs par défaut ont correctement été définies, tapez
filename ?
Chaque option de l'écran d'aide est suivie d'un + ou d'un - pour indiquer sa valeur par défaut.

-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.
Cette option est désactivée par défaut.

-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 A à Z, les chiffres 0 à 9 et le caractère de soulignement _.
Cette option est désactivée par défaut.
Une autre forme de cette option permet de spécifier l'ensemble des caractères acceptés pour les mots : -w[set], où [set] est une expression régulière valide quelconque.
Si vous incluez des caractères alphabétiques dans l'ensemble, celui-ci contiendra automatiquement à la fois la forme majuscule et la forme minuscule de chaque lettre de l'ensemble (quelle que soit la manière dont cette lettre a été tapée), même si la recherche est sensible à la casse.
Si vous utilisez l'option -w avec l'option -u, le nouvel ensemble de caractères valides est enregistré en tant qu'ensemble par défaut.

-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.
Cette option est désactivée par défaut.

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, bo* permet de trouver bot, boo ainsi que bo.

+

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, bo+ permet de trouver bot et boo, mais pas b, bo ou bt.

{}

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 [bot] permet de trouver b, o ou t.

[^]

Un accent circonflexe placé au début d'une chaîne entre crochets signifie SAUF. Ainsi, [^bot] permet de trouver n'importe quel caractère à l'exception de b, o ou t.

[-]

Un trait d'union placé à l'intérieur des crochets indique une plage de caractères. Par exemple, [b-o] permet de trouver n'importe quel caractère situé entre b et o.

\

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, \^ correspond à ^ et n'indique pas le début d'une ligne.


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 ==.

Voir aussi