Dans cet article, nous vous montrons comment exécuter une recherche de chaîne avancée à l'aide de Grep avec une expression régulière en vous donnant 10 exemples pratiques sur ses implémentations. De nombreux exemples abordés dans cet article ont des implications pratiques, ce qui signifie que vous pouvez les utiliser dans votre programmation Linux quotidienne. Les exemples suivants décrivent quelques exemples d'expressions rationnelles pour les modèles couramment recherchés.
Exemple 1 : Rechercher un seul affréteur dans un fichier texte
Pour afficher des lignes dans le fichier 'book' qui contiennent un caractère '$', tapez :
$ grep '\$' livreExemple 2 : Rechercher une seule chaîne dans un fichier texte
Pour afficher des lignes dans le fichier 'book' qui contient la chaîne '$14.99', tapez :
$ grep '\$14\.livre de 99'Exemple 3 : Rechercher un seul affréteur spécial dans un fichier texte
Pour sortir les lignes du fichier 'book' qui contiennent un caractère '\', tapez :
$ grep '\\' livreEx 4: Correspondance des lignes commençant par un certain texte
Utilisez 'ˆ' dans une expression rationnelle pour indiquer le début d'une ligne.
Pour afficher toutes les lignes dans '/usr/dict/words' commençant par 'pro', tapez :
$ grep 'ˆpro' /usr/dict/wordsPour afficher toutes les lignes du fichier « livre » qui commencent par le texte « au début », quelle que soit la casse, tapez :
$ grep -i livre 'ˆau commencement'REMARQUE: Ces expressions rationnelles étaient citées avec des caractères '; c'est parce que certains shells traitent autrement le caractère 'ˆ' comme un "métacaractère" spécial
En plus des recherches de mots et d'expressions, vous pouvez utiliser grep pour rechercher des modèles de texte complexes appelés expressions régulières. Une expression régulière - ou "regexp" - est une chaîne de texte de caractères spéciaux qui spécifie un ensemble de modèles pour correspondre.
Techniquement parlant, les modèles de mots ou de phrases sont des expressions régulières, juste des expressions très simples. Dans une expression régulière, la plupart des caractères, y compris les lettres et les chiffres, se représentent eux-mêmes. Par exemple, le modèle d'expression régulière 1 correspond à la chaîne '1', et le motif garçon correspond à la chaîne « garçon ».
Il existe un certain nombre de caractères réservés appelés métacaractères qui ne se représentent pas dans une expression régulière, mais ils ont une signification particulière qui est utilisée pour créer des modèles complexes. Ces métacaractères sont les suivants : ., *, [, ], , $, et \. Il est bon de noter que ces métacaractères sont communs à presque toutes les distributions Linux communes et spéciales. Voici un bon article qui couvre les significations spéciales des métacaractères et donne des exemples de leur utilisation.
Ex 5: Correspondance des lignes se terminant par un certain texte
Utilisez '$' comme dernier caractère du texte entre guillemets pour faire correspondre ce texte uniquement à la fin d'une ligne. Pour afficher les lignes du fichier 'going' se terminant par un point d'exclamation, tapez :
$ grep '!$' vaEx 6 : Lignes correspondantes d'une certaine longueur
Pour faire correspondre des lignes d'une longueur particulière, utilisez ce nombre de '.' caractères entre 'ˆ' et '$' - par exemple, pour faire correspondre toutes les lignes de deux caractères (ou colonnes) de large, utilisez 'ˆ… $' comme expression rationnelle à rechercher.
Pour afficher toutes les lignes dans '/usr/dict/words' qui ont exactement trois caractères de large, tapez :
$ grep 'ˆ… $' /usr/dict/wordsPour les lignes plus longues, il est plus utile d'utiliser une construction différente : 'ˆ.\nombre\$', où nombre est le nombre de lignes à faire correspondre. Utilisez ',' pour spécifier une plage de nombres.
Pour afficher toutes les lignes de '/usr/dict/words' qui ont exactement douze caractères de large, tapez :
$ grep 'ˆ.\12\$' /usr/dict/wordsPour afficher toutes les lignes dans '/usr/dict/words' qui comportent vingt-deux caractères ou plus, tapez :
$ grep 'ˆ.\22,\$' /usr/dict/wordsEx 7 : Lignes correspondantes qui contiennent l'une de certaines expressions régulières
Pour faire correspondre les lignes qui contiennent un certain nombre d'expressions régulières, spécifiez chacune des expressions régulières à rechercher entre les opérateurs d'alternance ('\|') comme expression régulière à rechercher. Les lignes contenant l'une des expressions rationnelles données seront affichées.
Pour afficher toutes les lignes dans « playboy » qui contiennent soit les motifs « le livre » ou « gâteau », tapez :
$ grep 'le livre\|gâteau' playboyEx 8: Lignes correspondantes qui contiennent toutes certaines expressions régulières
Pour sortir des lignes qui correspondent tout d'un certain nombre d'expressions rationnelles, utilisez grep pour afficher les lignes contenant la première expression rationnelle que vous souhaitez faire correspondre, et redirigez la sortie vers un grep avec la deuxième expression rationnelle comme argument. Continuez à ajouter des tuyaux aux recherches grep pour toutes les expressions rationnelles que vous souhaitez rechercher.
Pour afficher toutes les lignes de la « playlist » contenant à la fois les motifs « le rivage » et « le ciel », quelle que soit la casse, tapez :
$ grep -i Liste de lecture 'le rivage' | grep -i cielEx 9 : Lignes correspondantes qui ne contiennent que certains caractères
Pour faire correspondre les lignes qui ne contiennent que certains caractères, utilisez l'expression rationnelle 'ˆ[characters]*$', où les caractères sont ceux à rechercher. Pour sortir des lignes dans '/usr/dict/words' qui ne contiennent que des voyelles, tapez :
$ grep -i 'ˆ[aeiou]*$' /usr/dict/wordsL'option '-i' correspond aux caractères quelle que soit la casse ; ainsi, dans cet exemple, tous les caractères de voyelle sont mis en correspondance quelle que soit la casse.
Ex 10 : Trouver des phrases indépendamment de l'espacement
Une façon de rechercher une phrase qui peut apparaître avec des espaces supplémentaires entre les mots, ou à travers une ligne ou un saut de page, consiste à supprimer tous les sauts de ligne et les espaces supplémentaires de l'entrée, puis à saisir. Pour ce faire, dirigez l'entrée vers tr avec "\r\n:\>\|-" comme argument de l'option '-d' (en supprimant tous les sauts de ligne de l'entrée) ; dirigez-le vers le filtre fmt avec l'option '-u' (sortie du texte avec un espacement uniforme); et pipe que pour grep avec le modèle à rechercher.
Pour rechercher entre les sauts de ligne la chaîne « en même temps que » dans le fichier « docs », tapez :
$ chat docs | tr -d '\r\n:\>\|-' | fmt -u | grep 'en même temps que'
Résumé
Dans cet article, nous avons passé en revue 10 exemples pratiques d'utilisation de la commande Grep Linux pour rechercher et trouver des chaînes dans un fichier texte. En cours de route, nous avons appris à utiliser des expressions régulières en conjonction avec Grep pour effectuer des recherches complexes sur des fichiers texte. Vous avez maintenant une meilleure idée de la puissance des fonctions de recherche Linux.
Voici des ressources supplémentaires pour ceux qui souhaitent en savoir plus sur la programmation Linux :
Ressources pour les administrateurs système
- Guide d'administration système Linux - Qu'est-ce que le système d'exploitation Linux et comment il fonctionne
- Guide de l'administrateur système Linux - Présentation de la mémoire virtuelle Linux et du cache de tampon de disque
- Guide de l'administrateur système Linux - Meilleures pratiques pour la surveillance des systèmes Linux
- Guide de l'administrateur système Linux - Meilleures pratiques pour effectuer des démarrages et des arrêts Linux
- Guide de l'administrateur système Linux - Meilleures pratiques pour la création et la gestion des opérations de sauvegarde
Ressources pour les programmeurs du noyau Linux
- Comment fonctionne la gestion de la mémoire du système d'exploitation Linux
- Examen complet des processus du système d'exploitation du noyau Linux
- Quels sont les mécanismes derrière la gestion des tâches du noyau Linux
Dictionnaire du système de fichiers Linux
Examen complet du fonctionnement du système de fichiers et de répertoires Linux