Grep

Grep recherche dans Ies fichiers d'entrée indiqués les lignes correspondant à un certain motif. Si aucun fichier n'est fourni, ou si le nom'-' est mentionné, la lecture se fait depuis l'entrée standard. Par défaut, grep affiche les lignes correspondant au motif.

Il existe trois variantes principales de grep, contrôlées par les options suivantes.

OPTIONS

-G Interprète le motif comme une expression régulière simple (voir plus bas). C'est le comportement par défaut.

-E Interprète le motif comme une expression régulière étendue (voir plus bas).

-F Interprète le motif comme une liste de chaînes figées, séparées par des Sauts de Lignes (NewLine). La correspondance est faite avec n'importe laquelle de ces chaînes.

De plus, il existe deux variantes du programme : egrep et fgrep. ð Egrep est similaire (sans être identique) à grep -E, et est compatible avec les versions UNIX historiques de egrep.

ð Fgrep est identique à grep -F.

Toutes les variantes de grep acceptent les options suivantes :

- num Les correspondances seront affichées avec num lignes supplémentaires avant et après. Néanmoins, grep n'affichera jamais une ligne plus d'une fois.

-A num Afficher num lignes supplémentaires après la ligne correspondante.

-B num Afficher num lignes supplémentaires avant la ligne correspondante.

-C est équivalent à -2.

-V Afficher le numéro de version de grep sur la sortie d'erreur standard. Ce numéro de version devra être inclus dans tous les rapports de bugs (voir plus bas).

-b Avant chaque ligne, afficher son décalage (en octets) au sein du fichier d'entrée.

-c Ne pas afficher les résultats normaux. A la place, affichez un compte des lignes correspondantes pour chaque fichier d'entrée. Avec l'option -v (voir plus bas), affichez les nombres de lignes ne correspondant pas au motif.

-e motif Utiliser le motif indiqué. Ceci permet de protéger les motifs commençant par -

-f fichier Lire le motif dans le fichier indiqué.

-h Ne pas afficher le nom des fichiers dans les résultats lorsque plusieurs fichiers sont parcourus.

-i Ignorer les différences majuscules/minuscules aussi bien dans le motif que dans les fichiers d'entrée. ([NDT] Comme toujours, ceci ne fonctionne pas avec les caractères accentués...)

-L Ne pas afficher les résultats normaux. A la place, indiquer le nom des fichiers pour lesquels aucun résultat n'aurait été affiché.

-l Ne pas afficher les résultats normaux. A la place, indiquer le nom des fichiers pour lesquels des résultats auraient été affichés.

-n Ajouter à chaque ligne de sortie un préfixe contenant son numéro dans le fichier d'entrée.

-q Silence. Ne pas afficher les résultats normaux.

-s Ne pas afficher les messages d'erreurs concernant les fichiers inexistants ou illisibles.

-v Inverser la mise en correspondance, pour sélectionner les lignes ne correspondant pas au motif.

-w Ne sélectionner que les lignes contenant une correspondance formant un mot complet.

La sous-chaîne correspondante doit donc être soit au début de la ligne, soit précédée d'un caractère n'appartenant pas à un mot. De même, elle doit se trouver soit à la fin de la ligne, soit être suivie par un caractère n'appartenant pas à un mot. Les caractères composants les mots sont les lettres, les chiffres et le souligné (Î_'). ([NDT] Bien entendu les minuscules accentuées ne sont pas des lettres ! elles servent donc à séparer les mots...)

-x Ne sélectionner que les correspondances qui occupent une ligne entière.

EXPRESSIONS RÉGULIÈRES

Une expression régulière est un motif qui permet de décrire un ensemble de chaînes. Les expressions régulières sont construites comme des opérations arithmétiques, en utilisant des opérateurs divers pour combiner des expressions plus petites.

Grep comprend deux versions différentes pour la syntaxe des expressions régulières : ãsimpleä et ãétendueä.

Dans la version GNU de grep, il n'y a pas de différence dans les fonctionnalités disponibles en utilisant l'une ou l'autre des syntaxes. Dans d'autres implémentations, les expressions régulières simples sont moins puissantes. La description ci-dessous correspond aux expressions étendues, les différences avec les expressions simples étant résumées ensuite.

Les briques élémentaires sont les expressions régulières correspondant à un simple caractère. La plupart des caractères, y compris toutes les lettres et les chiffres, sont des expressions régulières se correspondant à eux-mêmes. Tout méta-caractère ayant une signification spéciale doit être protégé en le faisant précéder d'un BackSlash.

Une liste de caractères, encadrée par [ et ] peut être mise en correspondance avec n'importe quel caractère unique appartenant à la liste. Si le premier caractère de la liste est l'accent circonflexe ^, alors la mise en correspondance se fait avec n'importe quel caractère absent de la liste. Par exemple, l'expression régulière [0123456789] convient pour n'importe quel chiffre unique.

Un intervalle de caractères ASCII peut être indiqué en donnant le premier et le dernier caractère séparés par un tiret.

Finalement, il existe certaines classes de caractères prédéfinies. Leurs noms sont assez explicites :

[:alnum:], [:alpha:], [:cntrl:], [:digit:] (chiffres)

[:graph:], [:lower:] (minuscules)

[:print:] (affichables)

[:punct:], [:space:], [:upper:] (majuscules)

[:xdigit:] (chiffres hexadécimaux).

Par exemple, [[:alnum:]] correspond à [0-9A-Za-z], à la différence que le dernier dépend de l'encodage ASCII, alors que le premier est plus portable.

Remarquez que les crochets dans les noms de classes font partie intégrante du nom symbolique, et qu'ils doivent donc être inclus en plus des crochets encadrant la liste. La plupart des méta-caractères perdent leurs significations spéciales au sein des listes. Pour inclure un ] littéral, mettez-le en premier dans la liste. De même, pour inclure un ^ littéral, placez-le n'importe ou sauf au début de la liste. Enfin, pour inclure un - placez-le en dernier.

Le point . correspond à n'importe quel caractère unique. Le symbole \w est un synonyme de [[:alnum:]] et \W un synonyme de [^[:alnum]].

L'accent circonflexe ^ et le symbole dollar $ sont des méta-caratères correspondant respectivement à une chaîne vide au

début et en fin de ligne. Les symboles \< et \> correspondent

respectivement à une chaîne vide en début et en fin de mot.

Le symbole \b correspond à une chaîne vide à l'extrémité d'un mot, et \B correspond à une chaîne vide ne se trouvant pas à une extrémité de mot.

Une expression régulière correspondant à un caractère unique peut être suivie par l'un des opérateurs de répétition suivants :

? L'élément précédent est facultatif et doit être mis en correspondance une fois au maximum.

L'élément précédent doit être mis en correspondance zéro ou plusieurs fois.

L'élément précédent doit être mis en correspondance au moins une fois.

{n} L'élément précédent doit être mis en correspondance exactement n fois.

{n,} L'élément précédent doit être mis en correspondance n fois ou plus.

{,m} L'élément précédent est facultatif et doit être mis en correspondance m fois au plus.

{n,m} L'élément précédent doit être mis en correspondance au moins n fois, mais au plus m fois.

Deux expressions régulières peuvent être juxtaposées, l'expression en résultant correspondra à toute chaîne formée par la juxtaposition de deux sous-chaînes correspondant respectivement aux deux sous-expressions.

Deux expressions régulières peuvent être reliées par l'opérateur infixe |; l'expression résultante correspondra à toute chaîne correspondant à l'une ou l'autre des deux sous-expressions.

Les répétitions ont priorité sur les juxtapositions, qui à leur tour ont priorité sur les alternatives. Une sous-expression peut être entourée par des parenthèses pour modifier ces règles de précédence.

La référence inverse \n ou n est un chiffre, correspond à la sous-chaîne déjà mise en correspondance avec la n ième sous-expression régulière entre parenthèses.

Dans les expressions régulières simples, les méta-caractères ?, +, {, |, ( et ) perdent leurs significations spéciales, il faut utiliser à la place leurs versions avec BackSlash \?, \+, \{, \|, \( et \).

Dans egrep le méta-caractère { perd sa signification spéciale, il faut utiliser \{ à la place.

Copyright (c) 1995 Free Software Foundation, Inc.

Vous avez le droit de faire et de distribuer des copies de cette carte à condition que la notice de copyright et cette note d'autorisation soient conservées sur toutes les copies.

D'après la traduction de la man page de grep par Christophe Blaess, 1997.

(ccb@club-internet.fr)


© Copyright 2000 Diamond Editions/Linux magazine France - Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; A copy of the license is included in the section entitled "GNU Free Documentation License"