Featured image of post Les regex -> expression régulière

Les regex -> 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

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

Supprime tous les guillemets dans le fichier

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

awk

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

user$ awk '$0 !~ /^$/' phonelist.txt
user$ 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

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

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

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

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

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

Si vous en voulez encore :

L’article de Wikipedia

Built with Hugo
Theme Stack designed by Jimmy