grep et les expressions régulières
Ayant la possibilité de traiter des données entrants sur le stdin
, UNIX possède un nombre d'outils puissants pour le traitement et transformation de ses données.
La philosophie d'UNIX : un outil bien défini pour faire une seule tâche. La puissance se trouve dans le bon enchaînement d'outils pour accomplir une tâche.
grep
: _G_et with _R_egular _E_x_p_ression
grep
: _G_et with _R_egular _E_x_p_ressionUn processeur qui filtre le stdin
et qui émet (sur stdout
) seulement les lignes qui respectent l’expression régulière passé comme paramètre.
Ici, grep
prend l'expression "hello"
comme paramètre. C'est l'expression la plus simple : il faut trouver les lignes qui contient le mot hello
uniquement.
Grep peut lire un fichier directement (au lieu de prendre des données du flux stdin
) :
... ou peut traverser de façon recursive un répertoire :
Les expressions régulières
Une façon de préciser, de manière flexible, un certain nombre de critères pour filtrer un flux de text entrant.
Exemples des wildcards :
abc*
: un text qui contientab
suivi par 0 ou plusieursc
abc+
: un text qui contientab
suivi par 1 ou plusieursc
abc?
: un text qui contientab
suivi par 0 ou 1c
a.c
: un text qui commence aveca
suivi par n’importe quel caractère (un seul) suivi parc
Compter le nombre d'itérations dun caractère :
abc{2}
: un text qui contientab
suivi par 2 foisc
abc{2,}
: un text qui contientab
suivi par au moins 2 foisc
abc{2,5}
: un text qui contient ab suivi par 2 jusqu’à 5 foisc
(mais pas plus)
Séquences de caractères :
a(bc)*
: un text qui contienta
suivi par 0 ou plusieurs séquences debc
a(b|c)
: un text qui contienta
suivi parb
ouc
Types de caractère :
a\d
: un text qui commence aveca
suivi par un chiffre (digit simple)
Emplacement des caractères :
^abc
: un text qui commence parabc
abc$
: un text qui se termine parabc
Énumérer des options avec [ ]
:
[a-zA-Z]
: un caractère qui est une lettre miniscule ou majuscule
Il y a beaucoup de ressources sur les expressions régulières :
Exercice : adresses e-mail
Trouver une expression régulière qui valide le format d’une adresse e-mail de manière suivante :
Commencez par valider votre expression avec https://regex101.com. Le fichier emails.txt
existe dans vos dossiers. Est-ce que votre expression régulière fonctionne avec grep
?
Exercice : Numéro téléphonique
Rédigez une expression régulière qui identifie un numéro de téléphone valide :
Au moins 10 digits
Commence par une préfixe valable:
Soit un zéro
Soit par un
+
suivi par 2 à 4 chiffres (ex.+33
)
Suivi par un chiffre qui n'est pas zéro (ex.
6
)Suivi par 4 paires de chiffres (ex.
32521467
)
Les numéros +33632521467
, 0632521467
, +27489767831
sont valables parmi les options suivantes :
Exercice : Lookarounds
J'ai un fichier HTML et je veux extraire uniquement la valeur entre les balises :
J'aimerais extraire (avec grep
) uniquement les textes entre les balises sur chaque ligne :
Astuces :
Regardez les options de
grep
pour voir comment sortir uniquement le texte correspondant et pas toute la ligne qui contient le textVous allez peut-être constater qu'il y a des symboles pas voulus dans le résultat (les balises). Pour les enlever, on peut utiliser les lookarounds (chercher à comprendre sur cette page)
Exercice : guillemets
Est-ce que vous pourriez extraire correctement le contenu de l'attribute translate
? :
Le résultat devrait être :
Attention, il faut garder les guillemets qui sont échappés.
Je ne vous donne pas la solution ici, essayez de trouver tout seul la solution !
Dernière mise à jour