grep abc fichier
recherche la chaine abc
dans toutes les lignes du fichier. Les lignes trouvées sont envoyées sur la sortie standard, éventuellement redirigée.
grep " " fichier
recherche les lignes qui contiennent un (et un seul) espace entre 2 mots
grep "ab*c" fichier
, idem avec 0 ou plusieurs occurrences de la lettre b
grep "^s.*n$" fichier
, reconnait les lignes débutant par s (^s), finissant par n (n$), avec éventuellement des caractères (quelconques) intermédiaires (.*)
grep "^[a-zA-Z][a-zA-Z0-9]*" [a-f]*.txt
recherche les chaines commençant par une lettre suivie d'un nombre qcq de caractères alphanumériques, dans tous les fichiers dont les noms débutent par une lettre de a à f avec une extension .txt
/../
, appelé opérateur de correspondance, qui applique le modèle par défaut sur la variable $_
, et renvoie vrai ou faux.$_
, recherche de la séquence az :
if (/az/) { print $_ ; }
=~
comme dans l'exemple :
if ($var =~ /az/) { print $var ; }
cherche-az
, pour rechercher la séquence "az":
# pour opérer sur toutes les lignes saisies au clavier ou récupérées sur l'entrée standard # rappel : chaque ligne de l'entrée est stockée dans l'argumement par défaut $_ # appel : cat fichier |cherche-az while () { if (/az/) { print $_ ; } } # pour opérer sur toutes les lignes d'un fichier # appel cherche-az open(IN, "~/essai.txt"); while ( ) { chomp($_); if (/az/) { print "$_ \n"; } }
. (point) représente un caractère qcq, sauf \n * (astérisque) répétition du caractère précédent + au moins une occurence de l'expression régulière ? au plus une occurence de l'expression régulière [...] (crochets) l'un des caractères de l'ensemble. [^..] en début de crochets recherche dans le complémentaire de l'ensemble ^ recherche en début de ligne $ recherche en fin de ligne \ annule le rôle de méta-caractère, pour jouer le rôle du caractère usuel {n,m} indique le nombre de répétitions attendus du caractère précédent | joue le rôle de "ou" entre 2 expr rég.
.\.txt
recherche les chaines du genrec.txt
, où c est un caractère unique qcq\*$
recherche les chaines qui se terminent ($) par le caractère astérisque (\*)
c
recherche le caractère désigné par c.
.
Le point remplace tout caractère unique, sauf \n (newline)
a.
toute suite de 2 caractères commençant par a, sauf a\n
b.c
désigne toute suite de 3 caractères du genre bac, bbc, bcc
, ...
[abc]
classe de caractères, sélectionne toute chaine contenant l'un des caractères listés
[a-z]
toute lettre minuscule
[0-9]
équivaut à [0123456789], un chiffre quelconque
[a-zA-Z0-9\-_]
correspond à n'importe quelle lettre ou chiffre, ou au tiret ou au souligné
^
juste après [ joue le rôle d'exclusion des caractères qui suivent.
[^aeiou]
tout sauf une lettre voyelle
[^a-zA-Z0-9]
sélectionne un caractère non alphanumérique
Construction | Classe équivalente | Construction de négation | Classe équivalente |
---|---|---|---|
\d (un chiffre) | [0-9] | \D (chiffres, non !) | [^0-9] |
\w (1 caractère de mot) | [a-zA-Z0-9] | \W (mots , non!) | [^a-zA-Z0-9] |
\s (espace) | [ \r \n \f \t] | \S (space, non !) | [^ \r \n \f \t] |
[\da-fA-F]
correspond à un chiffre hexadécimal quelconque
a[bc]d
correspond aux chaînes abd ou acd.
expat
une expression régulière atomique quelconque, alors ce sont
expat1expat2expat3 ... |
toute concaténation sans espace formée d'expr. régulière atomiques |
expat* |
chaine composée de 0 à N caractères vérifiant expat |
expat+ |
chaine contenant au moins un caractère vérifiant expat |
expat? |
chaine contenant au plus un caractère vérifiant expat |
expat{n} |
chaine composée exactement de n caractères vérifiant expat |
expat{n,} |
chaine composée d'au moins n caractères vérifiant expat |
expat{n,m} |
chaine composée de n à m caractères vérifiant expat |
a*
caractère de multiplication, suivant un caractère signifie la répétition de 0 à plusieurs exemplaires de ce caractère.[ab]*
signifie répétition possible d'un quelconque des 2 lettres a ou b.
a+
répétition de 1 à plusieurs exemplaires de a
a?
0 ou 1 exemplaire de a/x{5,10}
5 à 10 répétitions attendues de x
a{5,}
5 ou plus répétitions attendues de a
a{5}
exactement 5 occurrences de a
a.{5}b
recherche les mots contenant 5 caractères entre a et b
expsim
une expression régulière simple quelconque, comme définie précédemment, alors ce sont des expressions régulières générales :
expsim1expsim2 ... |
toute concaténation formée d'expr. régulière simples | |
^expsim |
recherche le motif expsim en début de chaine |
|
expsim$ |
recherche le motif expsim en fin de chaine |
|
expsim\b |
le motif expsim doit se trouver la fin d'un mot | |
expsim1|expsim2|... |
alternative : recherche de expsim1 ou expsim2 ... | (expsim)* |
chaine composée de 0 à N caractères vérifiant expsim |
(expsim)+ |
chaine contenant au moins un caractère vérifiant expsim |
|
(expsim)? |
chaine contenant au plus un caractère vérifiant expsim |
(expsim){n} |
chaine contenant la concaténation d'exactement n chaines vérifiant expsim |
(expsim){n,m} |
chaine composée de n à m caractères vérifiant expsim |
^, $
sont appelés motifs d'ancrage, car ils permettent de préciser l'endroit où doit être effectuée la recherche du motif dans la chaine (alors que sans directive particulière la recherche de correspondance du motif avec la chaine s'effectue de gauche à droite de la chaine).
\b
indique une limite de mot obligatoire, à l'endroit où il est inséré dans le motifinfo\b est vérifié par "l'info pour tous", "info-matin" mais pas par infos, informatique ...\binfo est vérifié par "informatique","m'informer" mais pas desinformation, ..
expsim
sont indispensables, sinon les opérateurs de répétition s'appliquent au dernier caractère de l'expression (il s'agit d'une question de priorité des opérateurs ..)li(nux)*
et linux*
reconnaissent respectivement li, linux, linuxnux,..
et linu, linux, linuxx, linuxxx,...
color|couleur
réussit si l'un des motifs, soit color
, soit couleur
, est trouvé
5[0-9]{2}
reconnait tout nombre de 500 à 599.
/^(eleve|prof|stage)[3-7]/
est satisfait par les chaines commençant par l'un des 3 mots suivis immédiatement par un numéro de 3 a 7
eleve(\d).+poste\1
sera satisfait par eleve3 au poste3 et non par eleve5 au poste3