Grep est une méthode simple et largement répandue pour re­cher­cher des chaînes spé­ci­fiques dans des fichiers ou pour filtrer ceux-ci dans Linux. La commande Linux épouse ici une syntaxe uniforme et facilite la recherche grâce à des pa­ra­mètres définis.

Qu’est-ce que grep ?

Grep est l’abré­via­tion de « global regular ex­pres­sion print ». Le programme étant inclus dans le paquet essentiel d’Ubuntu, son ins­tal­la­tion séparée est superflue. Les commandes grep sont utilisées pour re­cher­cher des motifs et des chaînes de ca­rac­tères. Cela permet aussi de filtrer les in­for­ma­tions re­cher­chées même dans les fichiers journaux vo­lu­mi­neux. On doit veiller à ne jamais exécuter grep sur les fichiers de pé­ri­phé­rique, car cela peut entraîner des problèmes.

Comment grep est-elle utilisée ?

La syntaxe de base de grep se présente comme suit : « grep [options] chaîne re­cher­chée [fichier] » ou « grep [options] [-e motif | -f fichier] [fichier] » à titre d’al­ter­na­tive. Un exemple simple de commande grep dans Linux consiste à re­cher­cher un terme spé­ci­fique dans le texte d’un code ou d’un fichier journal. Ainsi, si vous voulez trouver le terme « test » dans un fichier appelé exemple.txt, entrez ce qui suit dans grep : « grep "test" exemple.txt ». Vous verrez main­te­nant les lignes cor­res­pon­dantes de ce fichier s’afficher.

Ex­pres­sions ré­gu­lières à la base de grep

Cette opération s’appuie sur ce qui est dénommé les « ex­pres­sions ré­gu­lières » dans Linux. Ces « ex­pres­sions ré­gu­lières » sont dis­po­nibles dans les variantes basiques (ERb) et étendues (ERe), cette dernière étant im­por­tante pour grep. Les ex­pres­sions ré­gu­lières vous per­met­tent de re­cher­cher des ca­rac­tères in­di­vi­duels ou des chaînes avec grep. Si le caractère cor­res­pond à une lettre ou un chiffre, il peut être identifié par une simple saisie, même s’il fait partie d’une chaîne. Dans l’exemple du nombre « 2 », la commande ne retrouve pas seulement les oc­cur­rences isolées « 2 », mais aussi des chaînes telles que « 1234 », « Y2K » ou « Numéro2 ».

Certains ca­rac­tères dans grep servent à exécuter une fonction dans la recherche. Par exemple, le signe dollar « $ » permet de trouver la fin d’une ligne. Ces ca­rac­tères peuvent être re­cher­chés spé­ci­fi­que­ment grâce à une commande donnée dans grep. Pour ce faire, le caractère est précédé d’une barre oblique inverse. Ainsi, si vous re­cher­chez un point « . » comme signe de ponc­tua­tion dans un fichier, vous pouvez réaliser ceci à l’aide de la com­bi­nai­son « \. ».

Uti­li­sa­tion de listes avec grep

Les listes de dif­fé­rents ca­rac­tères, appelées « ex­pres­sions entre crochets », peuvent également être filtrées avec grep. Utilisez deux crochets « [ ] » pour spécifier la liste des ca­rac­tères à inclure dans la recherche. Si vous souhaitez par exemple re­cher­cher toutes les lettres « e » en ma­jus­cules ou en mi­nus­cules, utilisez l’option de recherche « [Ee] ». Appliquée isolément, cette entrée trouve toutes les lettres « e ». En la combinant, vous pouvez également filtrer des mots entiers ou des fragments de texte com­por­tant un grand ou petit « e ». Si vous entrez par exemple « [Ee]au » dans grep, le programme retrouve non seulement le terme « Eau », mais aussi des morceaux de texte com­por­tant un petit « e », comme « beau ».

De plus, grep vous offre la pos­si­bi­lité d’exclure certains ca­rac­tères d’une liste dans une recherche et de re­cher­cher uni­que­ment ceux qui n’ont pas été exclus à l’avance. Le terme de recherche est précédé du signe « ^ » à cet effet. Par exemple, « ^Ee » tient compte de tous les ca­rac­tères sauf « E » et « e ».

Sous Linux, grep vous permet de sauter quelques étapes de travail à l’aide de quelques listes pré­dé­fi­nies. Chacune de ces listes pré­dé­fi­nies est placée entre crochets sup­plé­men­taires, par exemple [[:liste exemple:]]. Les listes pré­dé­fi­nies sont les suivantes :

  • [:alnum:] : contient tous les chiffres [:digit:] et les lettres [:alpha:]
  • [:alpha:] : contient toutes les lettres [:upper:] et [:lower:]
  • [:blank:] : contient toutes les espaces générées par la barre d’espace ou le ta­bu­la­teur
  • [:cntrl:] : contient tous les ca­rac­tères de contrôle
  • [:digit:] : contient tous les chiffres de 0 à 9
  • [:graph:] : contient tous les ca­rac­tères gra­phiques [:alnum:] et [:punct:]
  • [:lower:] : contient toutes les lettres mi­nus­cules
  • [:print:] : contient tous les ca­rac­tères im­pri­mables [:alnum:], [:punct:] et [:space:]
  • [:punct:] : contient tous les signes de ponc­tua­tion et les ca­rac­tères spéciaux
  • [:space:] : contient tous les ca­rac­tères qui créent un espace vide, tels que les espaces ou les sauts de ligne
  • [:upper:] : contient toutes les lettres ma­jus­cules

Exemples de commandes grep utiles

Quand elles sont cor­rec­te­ment ap­pli­quées, les commandes grep vous aident à parcourir les fichiers vo­lu­mi­neux. De nombreux pa­ra­mètres vous per­met­tent de spécifier votre recherche afin que grep identifie pré­ci­sé­ment les seuls ca­rac­tères ou lignes dont vous avez besoin. Ceux-ci sont marqués d’un « - ». En voici quelques exemples utiles :

  • -c : avec -c ou -count, grep ne recherche pas le motif de recherche prédéfini, mais spécifie le nombre de lignes dans les­quelles le motif a été trouvé à la place. La commande grep « grep -c "test" exemple.txt » compte ainsi le nombre de lignes contenant des oc­cur­rences de « test » et vous en indique le nombre.
  • -l : si vous voulez savoir dans quel fichier un terme de recherche spé­ci­fique a été trouvé, utilisez l’option « -l » (petit « L »). Utilisez la commande grep « grep -l "test" \*.txt » pour in­ter­ro­ger tous les fichiers contenant le terme ou la chaîne « test ».
  • -i : utilisez -i pour ignorer la casse lors de votre recherche. La commande « grep -i "test" exemple.txt » renvoie donc toutes les lignes qui con­tien­nent à la fois « test » et « Test ».

Trois autres variantes de grep sont dis­po­nibles

Trois autres variantes s’ajoutent à la version régulière de grep. La première est egrep et cor­res­pond dans les grandes lignes à grep -E. Cette variante traite les motifs spécifiés comme des ex­pres­sions ré­gu­lières étendues. fgrep équivaut gros­siè­re­ment à grep -F. Elle recherche spé­ci­fi­que­ment les pa­ra­mètres de motif et in­ter­prète les ca­rac­tères qui sont lus comme faisant partie d’une ex­pres­sion régulière par d’autres commandes dans leur sig­ni­fi­ca­tion littérale sans fonction sup­plé­men­taire. Des exemples parmi d’autres en sont « $ », « * » ou « \ ». Enfin, rgrep cor­res­pond à grep -r et parcourt tous les ré­per­toires de manière récursive, en tenant également compte des sous-ré­per­toires.

Aller au menu principal