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.
cat test.txt | grep "hello"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) :
grep [fichier] -e [expression]... ou peut traverser de façon recursive un répertoire :
grep -r [repertoire] -e [expression]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 contientabsuivi par 0 ou plusieurscabc+: un text qui contientabsuivi par 1 ou plusieurscabc?: un text qui contientabsuivi par 0 ou 1ca.c: un text qui commence avecasuivi par n’importe quel caractère (un seul) suivi parc
Compter le nombre d'itérations dun caractère :
abc{2}: un text qui contientabsuivi par 2 foiscabc{2,}: un text qui contientabsuivi par au moins 2 foiscabc{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 contientasuivi par 0 ou plusieurs séquences debca(b|c): un text qui contientasuivi parbouc
Types de caractère :
a\d: un text qui commence avecasuivi par un chiffre (digit simple)
Emplacement des caractères :
^abc: un text qui commence parabcabc$: 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 :
bob
thirdy3@456
oui
bob(99)@builder.com
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
greppour 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 !
Mis à jour