Grep : tout ce qu’il faut savoir sur la commande Linux
Grep est une méthode simple et largement répandue pour rechercher des chaînes spécifiques 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 paramètres définis.
Qu’est-ce que grep ?
Grep est l’abréviation de « global regular expression print ». Le programme étant inclus dans le paquet essentiel d’Ubuntu, son installation séparée est superflue. Les commandes grep sont utilisées pour rechercher des motifs et des chaînes de caractères. Cela permet aussi de filtrer les informations recherchées même dans les fichiers journaux volumineux. On doit veiller à ne jamais exécuter grep sur les fichiers de périphé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 recherchée [fichier] » ou « grep [options] [-e motif | -f fichier] [fichier] » à titre d’alternative. Un exemple simple de commande grep dans Linux consiste à rechercher un terme spécifique 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 maintenant les lignes correspondantes de ce fichier s’afficher.
Expressions régulières à la base de grep
Cette opération s’appuie sur ce qui est dénommé les « expressions régulières » dans Linux. Ces « expressions régulières » sont disponibles dans les variantes basiques (ERb) et étendues (ERe), cette dernière étant importante pour grep. Les expressions régulières vous permettent de rechercher des caractères individuels ou des chaînes avec grep. Si le caractère correspond à 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 occurrences isolées « 2 », mais aussi des chaînes telles que « 1234 », « Y2K » ou « Numéro2 ».
Certains caractè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 caractères peuvent être recherchés spécifiquement 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 recherchez un point « . » comme signe de ponctuation dans un fichier, vous pouvez réaliser ceci à l’aide de la combinaison « \. ».
Utilisation de listes avec grep
Les listes de différents caractères, appelées « expressions entre crochets », peuvent également être filtrées avec grep. Utilisez deux crochets « [ ] » pour spécifier la liste des caractères à inclure dans la recherche. Si vous souhaitez par exemple rechercher toutes les lettres « e » en majuscules ou en minuscules, 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 comportant 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 comportant un petit « e », comme « beau ».
De plus, grep vous offre la possibilité d’exclure certains caractères d’une liste dans une recherche et de rechercher uniquement 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 caractères sauf « E » et « e ».
Sous Linux, grep vous permet de sauter quelques étapes de travail à l’aide de quelques listes prédéfinies. Chacune de ces listes prédéfinies est placée entre crochets supplémentaires, par exemple [[:liste exemple:]]. Les listes prédéfinies 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 tabulateur
- [:cntrl:] : contient tous les caractères de contrôle
- [:digit:] : contient tous les chiffres de 0 à 9
- [:graph:] : contient tous les caractères graphiques [:alnum:] et [:punct:]
- [:lower:] : contient toutes les lettres minuscules
- [:print:] : contient tous les caractères imprimables [:alnum:], [:punct:] et [:space:]
- [:punct:] : contient tous les signes de ponctuation et les caractères spéciaux
- [:space:] : contient tous les caractères qui créent un espace vide, tels que les espaces ou les sauts de ligne
- [:upper:] : contient toutes les lettres majuscules
Exemples de commandes grep utiles
Quand elles sont correctement appliquées, les commandes grep vous aident à parcourir les fichiers volumineux. De nombreux paramètres vous permettent de spécifier votre recherche afin que grep identifie précisément les seuls caractè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 lesquelles le motif a été trouvé à la place. La commande grep « grep -c "test" exemple.txt » compte ainsi le nombre de lignes contenant des occurrences de « test » et vous en indique le nombre.
- -l : si vous voulez savoir dans quel fichier un terme de recherche spécifique a été trouvé, utilisez l’option « -l » (petit « L »). Utilisez la commande grep « grep -l "test" \*.txt » pour interroger 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 contiennent à la fois « test » et « Test ».
Trois autres variantes de grep sont disponibles
Trois autres variantes s’ajoutent à la version régulière de grep. La première est egrep et correspond dans les grandes lignes à grep -E. Cette variante traite les motifs spécifiés comme des expressions régulières étendues. fgrep équivaut grossièrement à grep -F. Elle recherche spécifiquement les paramètres de motif et interprète les caractères qui sont lus comme faisant partie d’une expression régulière par d’autres commandes dans leur signification littérale sans fonction supplémentaire. Des exemples parmi d’autres en sont « $ », « * » ou « \ ». Enfin, rgrep correspond à grep -r et parcourt tous les répertoires de manière récursive, en tenant également compte des sous-répertoires.