5 façons d’utiliser les regex sous Linux (et pourquoi elles sont …

5 façons d'utiliser les regex sous Linux (et pourquoi elles sont ...



Si vous criez « expressions régulières » dans une foule d’utilisateurs de Linux, que se passe-t-il ? Et bien tout le monde vous dira comment les utiliser, et chaque réponse sera différente.

Les expressions régulières – souvent appelées regex – sont des séquences de caractères qui définissent un motif de recherche dans un texte. Elles semblent donc n’avoir qu’un seul but. Mais vous seriez surpris de voir à quel point elles sont utiles.

Les expressions régulières peuvent être utilisées pour la recherche de partenaires, le traitement de texte, la validation de données et bien d’autres choses encore.

L’utilisation des expressions régulières peuvent être très complexes

Le seul bémol à l’utilisation des expressions régulières est qu’elles peuvent devenir très complexes. Et ce au point de constituer une langue à part entière.

Une fois que vous aurez pris en main les expressions régulières, vous les trouverez inestimables. Il y a des choses que vous pouvez faire avec les expressions régulières que vous ne pouvez faire avec rien d’autre. Et elles rendent l’interaction avec la ligne de commande ou même les scripts bash très puissante.

Permettez-moi de vous présenter cinq façons différentes d’utiliser les expressions régulières. Tout d’abord, parlons des patterns regex.

Qu’est-ce qu’un motif d’expression régulière ?

Il y a quatre concepts de base que vous devez comprendre à propos des expressions régulières :

  • Les caractères littéraux correspondent au(x) caractère(s) exact(s) spécifié(s) (par exemple, « bonjour » correspond uniquement à « bonjour »).
  • Les classes de caractères regroupent les caractères au sein d’un ensemble (par exemple, [a-zA-Z] correspond à toutes les lettres de « a » à « z »).
  • La recherche de motifs (pattern matching) est utilisée pour rechercher des motifs dans les chaînes de caractères (par exemple, \w correspond à n’importe quel caractère verbal, soit [a-zA-Z0-9_]).
  • Les quantificateurs spécifient le nombre de fois qu’un motif doit être recherché (par exemple, * correspond à 0 ou plusieurs occurrences, + correspond à 1 ou plusieurs occurrences).

Voici un aperçu de la syntaxe des expressions régulières :

  • ^ – début de la chaîne
  • \ – caractère d’échappement
  • . – tout caractère unique
  • [a-z] – toute lettre minuscule de ‘a’ à ‘z’
  • [A-Z] – Toute lettre majuscule de « A » à « Z ».
  • [0-9] – tout chiffre de 0 à 9
  • $ – fin de la chaîne

Voici quelques exemples de base :

  • ZDNET – Correspond à la chaîne littérale « ZDNET ».
  • [a-zA-Z] – Correspond à n’importe quelle lettre de ‘A’ à ‘z’.
  • \d{5} – Correspond à exactement 5 chiffres (par exemple, 01234).
  • ^ZDNET$ – Recherche le début et la fin d’une chaîne, en s’assurant qu’il s’agit bien de « ZDNET » (et non d’une partie d’une autre chaîne).
  • (abc) – Regroupe les caractères pour les capturer et les référencer ultérieurement.
  • \S+ – Recherche un ou plusieurs caractères sans espace.

Par exemple, je pourrais rechercher la chaîne ZDNET dans un fichier texte (nommé test) à l’aide de la commande grep, comme suit :

Supposons qu’il y ait Hello, ZDNET ! en tête de ce fichier. La commande ci-dessus produirait le résultat suivant :

Et si j’utilisais ^ZDNET$ ? Dans l’exemple ci-dessus, ZDNET fait partie d’une chaîne de caractères plus longue, et ne produirait donc aucun résultat. En revanche, s’il existait une ligne contenant uniquement ZDNET, je pourrais la trouver à l’aide de la commande :

Le caractère $ marque la fin de la chaîne de caractères, de sorte que la recherche de motifs s’arrête après ZDNET.

Voyons maintenant cinq façons différentes d’utiliser les expressions régulières sous Linux.

1. Gestion de fichiers (avec l’aide de la commande grep)

J’ai déjà montré comment les expressions régulières peuvent être utilisées avec la commande grep. Mais il est important de savoir que vous pouvez aussi optimiser la gestion des fichiers sous Linux à partir de la ligne de commande en utilisant la commande grep. Avec les expressions régulières et grep, vous pouvez rechercher des patterns dans des fichiers texte avec des patterns simples ou très complexes.

Vous pouvez également utiliser les expressions rationnelles pour faire correspondre les espaces blancs et la ponctuation. Cela peut s’avérer utile pour supprimer les espaces supplémentaires après la ponctuation. Voici un exemple :

  • grep -E ‘ [^a-zA-Z0-9\.\?\!]’ input.txt

Décomposons cela :

  • grep – la commande permettant de rechercher et d’afficher les lignes correspondant à un pattern.
  • -E – Active la syntaxe étendue des expressions régulières.
  • ‘  – Recherche tout caractère espace (y compris les espaces supplémentaires).
  • [^a-zA-Z0-9\.\?\!] – Négation du motif précédent, qui correspond à tout signe de ponctuation à l’exception du point (.), du point d’interrogation (?), du point d’exclamation (!) et des chiffres (0-9). La négation est représentée par les caractères [].
  • input.txt – Le fichier dans lequel effectuer la recherche.
  • ‘ – Deuxième des deux guillemets simples qui entourent l’expression régulière.

Supposons que ce fichier contienne les lignes suivantes :

1. Bonjour, ZDNET ! Comment s’est passée votre journée ?
2. ZDNET
3. Je m’appelle Jack. Quel est le tien ?

Il n’y a que dans la première ligne que j’ai un espace avant un caractère qui n’est pas une lettre minuscule (a-z), une lettre majuscule (A-Z), un chiffre (0-9), un point (.), un point d’interrogation ( ?) ou un point d’exclamation ( !), de sorte que l’affichage n’inclurait que cette ligne.

2. Édition de texte (avec Vim – Vi IMproved)

Vim est un éditeur de texte puissant qui prend en charge les motifs regex. Malheureusement, mon éditeur de prédilection (nano) ne supporte pas les regex. Donc si j’ai besoin de cette fonctionnalité, je dois m’attaquer sérieusement à Vim.

Supposons que j’ai un fichier contenant le texte suivant :
« Le vieux chêne trône fièrement au centre du parc depuis des siècles.
Mon grand-père portait toujours son vieux manteau en laine, même en été.
Elle a acheté un nouveau téléphone dès sa sortie en magasin. »

Et si vous voulez remplacer manuellement « vieux » par « nouveau » ? C’est simple si le fichier ne fait que trois lignes. Mais s’il est beaucoup plus long, vous pouvez utiliser la commande regex suivante (dans Vim) pour effectuer automatiquement ce changement :

Voici la décomposition de cette commande :

  • \<vieux\> – Le motif à remplacer. Correspond à l’intégralité du mot « vieux », et non à une partie d’un autre mot. Le symbole \< correspond au début d’un mot et le symbole \> à la fin d’un mot.
  • /nouveau/ – La chaîne de remplacement. Encore une fois, nous utilisons les limites de mots pour nous assurer que seuls les mots entiers sont remplacés.
  • g – Indicateur global, qui applique la substitution à toutes les occurrences dans la ligne entière.

3. Édition de texte (avec find et sed)

La commande sed est une autre méthode d’édition de texte. Il s’agit d’une autre option intéressante pour la recherche et le remplacement dans les fichiers texte. Reprenons l’exemple précédent et remplaçons vieux par nouveau à l’aide de la commande suivante :

  • find . -name « *.txt » -exec sed -E ‘s/vieux/nouveau/g’ {} \;

Nous utilisons l’option -exec pour exécuter une commande sur chaque fichier trouvé par la commande find. Vous pourriez faire la même chose avec plusieurs fichiers *.txt, ce qui permet d’illustrer la puissance des expressions régulières.

4. Configuration du réseau avec la commande ip

Supposons que je dispose d’une machine à laquelle sont connectées plusieurs cartes réseau (ce qui indiquerait qu’il s’agit d’un serveur connecté à mon réseau local). Il peut y avoir des connexions réseau internes et externes sur la machine. Et je ne veux voir que les connexions dont l’adresse IP commence par 192.168.1. Pour ce faire, j’utilise deux commandes et une expression rationnelle. Les deux commandes sont ip et grep. La commande finale se présente comme suit :

  • ip addr | grep -Eo ‘192\.168\.1\.[0-9]{1,3}’

5. Visualisation des log

Je suis souvent les logs avec la commande tail et je peux utiliser des expressions régulières pour ne voir que ce dont j’ai besoin. Par exemple, je pourrais vouloir voir seulement les erreurs ou les avertissements qui apparaissent dans /var/log/syslog. Je peux simplement suivre ce fichier (qui conservera une mise à jour en temps réel des dernières entrées écrites dans le fichier syslog) de la manière suivante :

Je devrais alors parcourir la réponse affichée à la recherche d’une erreur ou d’un avertissement. La meilleure option serait donc d’utiliser des expressions régulières afin que seules les entrées contenant une erreur ou un avertissement soient affichées. Et là j’utilise tail et grep comme suit :

  • tail -f /var/log/syslog | grep -E ‘error|warning’

Voilà, mes amis, comment j’utilise les expressions régulières. Bien sûr, je n’ai fait qu’effleurer leur utilisation. Si vous êtes novice en matière d’expressions régulières, commencez petit et je vous conseille d’utiliser un chatbot d’IA pour progresser. Ils sont très très utiles car ils maîtrisent particulièrement bien les regex.



Source link

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.