grep
À quoi il sert
grep, apparu dans Unix en 1973, lit des lignes et n'écrit que celles qui correspondent à un motif. Le motif est une expression régulière basique par défaut, étendue avec -E, une chaîne fixe avec -F, ou une expression compatible Perl avec -P (extension GNU, par PCRE2). Les options choisissent ce que l'on veut obtenir : les lignes (par défaut), leur nombre (-c), les seules correspondances (-o), les noms des fichiers (-l, -L), ou rien du tout et un code de sortie (-q) : 0 si une ligne correspond, 1 si aucune, 2 en cas d'erreur. Il sait aussi afficher le contexte (-A, -B, -C), parcourir une arborescence (-r, avec --include et --exclude), lire ses motifs dans un fichier (-f) et des enregistrements séparés par l'octet nul (-z). Ubuntu 24.04 et Debian 13 fournissent GNU grep 3.11 ; la dernière version publiée par GNU est la 3.12 (avril 2025).
Quand le choisir
Pour trouver : isoler les lignes d'un journal, vérifier qu'un fichier contient une valeur dans un if, lister les fichiers qui mentionnent un terme. GNU grep compile ses motifs en automate fini et cherche les chaînes fixes par des algorithmes de saut : il est le plus rapide des outils de cette famille pour cette tâche. Dès qu'il faut transformer la ligne, passez à sed ; découper et calculer, à awk ; interroger du JSON, à jq. Pour fouiller du code source dans un dépôt, ripgrep (rg, 14.1 sur Debian 13) respecte .gitignore et parallélise, mais n'est pas installé sur un serveur.
Points d'attention
- Code 1 n'est pas une erreur : sous
set -eoupipefail, ungrepqui ne trouve rien arrête le script. Écrivezgrep ... || trueou testez explicitement le code. grep -ccompte des lignes, pas des occurrences ;grep -o ... | wc -lcompte les correspondances.grep 500trouve aussi1500et5000: encadrez le motif (-w,-x, ancres, délimiteurs).- Protégez le motif par des guillemets simples, et utilisez
-eou--s'il peut commencer par un tiret. Un motif venu d'un tiers se passe avec-Fpour être pris littéralement. \dn'existe qu'avec-P; en BRE et ERE, écrivez[0-9]. Debian et Ubuntu désactivent par un correctif les avertissements d'obsolescence d'egrepetfgrepet ceux des barres obliques inverses superflues, ajoutés par grep 3.8 en amont : un script qui passe en silence ici peut avertir ailleurs. Préférezgrep -Eetgrep -F.grep -Pfonctionne par retour arrière : un motif mal écrit face à des données hostiles expose au ReDoS.- Un octet nul ou un encodage invalide fait classer le fichier comme binaire (
binary file matches) ;-aforce la lecture comme texte, etLC_ALL=Caccélère nettement les recherches.
Par où commencer
La leçon grep et les expressions régulières du cours Traiter du texte, qui mène l'enquête sur l'incident de Signalements, et la leçon Lire et éditer des fichiers de Linux : premiers pas pour les premières options. Puis le manuel de GNU grep et le chapitre sur les expressions régulières de POSIX.