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 :
Laisser un commentaire