Les regex -> expression régulière

expression régulière

Les expressions régulières … cette phrase me hantait à l’époque…
Il m’était quasiment impossible d’effectuer une recherche dans des fichiers de logs…
Voici ce qu’il faut retenir !

Voici un extrait de la definition de  Wikipedia:

 Une expression rationnelle ou expression régulière est en informatique une chaîne de caractères que l’on appelle parfois un motif et qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise. Les expressions rationnelles sont issues des théories mathématiques des langages formels des années 1940

Pas évident non plus comme approche … alors que ce ne sont que des expressions que l’on retrouve regulièrement !
On les retrouve dans tous les langages : Perl, awk, Python, vi, grep, C++, Java, sed, avec le mod_rewrite d’apache, règles nginx…

1- La Théorie

Symbole   Description
n’importe quel caractère
[…] tout caractère parmis ceux énumérés
[^…] tout caractère exepté ceux énumérés
^ la position en début de ligne
$ la position en fin de ligne
< la position en début de mot
la position en fin de mot
| (pipe) reconnaît l’un ou l’aure des termes qu’il sépare
? 0 ou 1 occurence du caractère ou de l’expression régulière précédé
* 0 ou n occurences du caractère ou de l’expression régulière précédé

2- La Pratique avec egrep

Recherche les mots dont q n’est pas suivi de u :

egrep 'q[^u]' wordlist.txt

Recherche toute ligne qui commence par ‘From:, Subject:’ ou Date dans le fichier de mail :

egrep '^(From|Subject|Date):' mailbox

Liste toute les lignes du fichier money commençant avec le caractère $

egrep '^\\$' money

Liste tous les fichiers et répertoires dans le répertoire courant qui ne se terminent pas avec .tex

ls -l | egrep '\[^.tex\]$'

Liste tous les fichiers et répertoires dans le répertoire courant qui se terminent avec .tex

ls -l | egrep '\[.tex\]$'

3- La Pratique avec Vi

Remplace un espace ou plus par un espace.

:1,$s/ */ /g

Supprime les espaces en fin de ligne.

:1,$s/ *$//

Supprime tous les numéros en début de ligne.

:1,$s/^\[0-9\]\[0-9\]* //

4- La Pratique avec les autres outils

 sed

Supprime toutes les lignes vides du fichier

$ sed 's/^$/d' toto.txt

Supprime tous les guillemets dans le fichier

$ sed 's/"//g' toto.txt

awk

Affiche le fichier sans prendre en compte les lignes vides du fichier.

$ awk ‘$0 !~ /^$/’ phonelist.txt
$ awk ‘NF > 0’ toto.txt

grep

Soit le fichier phone2.txt suivant :

Durand, Sophie 4-5471
Bigard, Jean-Marie 8-7463
Roumanoff, Anne 3-8456
Satriani, Joe 7-1554
Saintlazar, Rob 5-8451
Vai, Steve 7-9547
Maiden, Iron 9-6669

Affiche les lignes dont le numéro de téléphone commence par un 5 et se termine par un 1

grep '5-...1' phone2.txt

Affiche les lignes dont le nom de famille commence par un S et dont le prénom commence par un R

$ grep '^S\[^ \]* R' phone2.txt

Affiche les lignes dont le nom de famille commence avec les lettres allant de M à Z

$ grep '^\[M-Z\]' phone2.txt

Affiche les lignes dont le prénom est composé de quatre caractères

$ grep ',....\t' phone2.txt

Si vous en voulez encore :

L’article de Wikipedia

Laisser un commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.