grep

Recherche de chaînes dans des fichiers texte à l'aide de grep avec une expression régulière

Recherche de chaînes dans des fichiers texte à l'aide de grep avec une expression régulière
grep est l'un des outils les plus populaires pour rechercher et trouver des chaînes dans un fichier texte. Le nom 'grep' dérive d'une commande de l'outil d'édition de ligne Unix ed désormais obsolète, la commande ed pour la recherche à l'échelle mondiale via un fichier pour un expression régulière et alors impression ces lignes étaient g/re/p, où re était l'expression régulière que vous utiliseriez. Finalement, la commande grep a été écrite pour effectuer cette recherche sur un fichier lorsque vous n'utilisez pas ed.

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 '\$' livre

Exemple 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 '\\' livre

Ex 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/words

Pour 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 '!$' va

Ex 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/words

Pour 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/words

Pour afficher toutes les lignes dans '/usr/dict/words' qui comportent vingt-deux caractères ou plus, tapez :

$ grep 'ˆ.\22,\$' /usr/dict/words

Ex 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' playboy

Ex 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 ciel

Ex 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/words

L'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

Ressources pour les programmeurs du noyau Linux

Dictionnaire du système de fichiers Linux

Examen complet du fonctionnement du système de fichiers et de répertoires Linux

Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...
Comment utiliser AutoKey pour automatiser les jeux Linux
AutoKey est un utilitaire d'automatisation de bureau pour Linux et X11, programmé en Python 3, GTK et Qt. En utilisant ses fonctionnalités de script e...
Comment afficher le compteur FPS dans les jeux Linux
Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...