Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Expressions régulières

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Faire des recherches dans des fichiers textes à l'aide des expressions régulières
Icône de la faculté
Chapitre no 8
Leçon : GNU et commandes Unix
Chap. préc. :Modifier les priorités d'exécution des tâches
Chap. suiv. :Effectuer les modifications de base des fichiers avec vi
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « GNU et commandes Unix : Faire des recherches dans des fichiers textes à l'aide des expressions régulières
Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Expressions régulières
 », n'a pu être restituée correctement ci-dessus.
Expressions rationnelles courantes
Caractère Type Explication
. Point n’importe quel caractère
[...] classe de caractères tous les caractères énumérés dans la classe
[^...] classe complémentée Tous les caractères sauf ceux énumérés
^ circonflexe marque le début de la chaine, la ligne...
$ dollar marque la fin d'une chaine, ligne...
| barre verticale alternative - ou reconnaît l'un ou l'autre
(...) parenthèse utilisée pour limiter la portée d'un masque ou de l'alternative
* astérisque 0, 1 ou plusieurs occurrences
+ le plus 1 ou plusieurs occurrence
? interrogation 0 ou 1 occurrence

Objectifs[modifier | modifier le wikicode]

Description : Les candidats devraient pouvoir manipuler des fichiers et des données textes en utilisant les expressions régulières. Cet objectif inclut la création simple d'expression régulières contenant plusieurs éléments d'écriture. Ceci inclut aussi l’utilisation régulière d’outils pour réaliser des recherches à travers un filesystem ou le contenu d’un fichier.

Les mots clés sont :

  • grep
  • regexp
  • sed

Correspondance de patterns[modifier | modifier le wikicode]

Il y a deux types de correspondance de patterns :

  • Wildcards (génération de nom de fichier)
  • Regexp (expression rationnelle)

Les caractères wildcards sont principalement employés dans le répertoire parent ou ses sous-répertoires. Les symboles *, ?, [ - ], ~, et ! sont utilisés en regex et ne génèrent pas de fichiers.

Les utilitaires regex sont :

  • grep, egrep
  • vi
  • more
  • sed
  • Perl

Ces derniers connaissent tous les trois groupes de patterns ci-dessous.

Patterns de recherche[modifier | modifier le wikicode]

Symboles Description Exemple
. Caractère quelconque Ab.a = Abla ou Abca
[ ] Caractères prédéfinis Ab[sd]a = Absa ou Abda
[ - ] Plage de caractères Ab[a-z]a = Abaa ou Abba...
[^ ] Caractères prohibés Ab[^0-9]a = Abaa ou Abba...
* Zéro caractère ou plus Ab*a = Aba ou Absala...
^ Début de ligne ^Aba = \nAba
$ Fin de ligne Aba$ = Aba\n
\ Caractère d'échappement Aba\$ = Aba$

Exemples :

Ab[0-3]s
^Ab\^bA
[01]bin$
^..\\
[^zZ]oro

Combinaisons de patterns[modifier | modifier le wikicode]

Symboles Description Exemple
.* Caractères lettres Ab.*a = Abrahma ou Abaa...
[ ]* Restriction aux caractères nommés th[aersti]* = There ou This...
[ - - ] Plages multiples Ab[0-2][a-c]a = Ab0aa ou Ab1aa...
\\ \ Correspondance \\[a-zA-Z]* = \Bethoven

Exemples :

Ab[0-3][a-z]s
...$
^[01]\^2
[0-9][a-z] \$
[a-zA-Z]*
^[^c-zC-Z]*
^[a-zA-Z0-9]$

Patterns de modification et remplacement[modifier | modifier le wikicode]

Symboles Description Exemple
m \{m\} Correspondance b[0-9]\{3\} = b911
\{m,\} Un caractère ou plus b[0-9]\{2,\} = b52
\{m,n\} Maximum n caractères b[0-9]\{2,4\} = b1234
\< Début de mot \<wh = where
\> Fin de mot [0-9]\> = bin01

grep[modifier | modifier le wikicode]

Pour chercher du texte dans les fichiers.

grep [options] [string] [files]

Options :

-i: Ignore case
-l: List filename only if at least one matches
-c: Display only count of matched lines
-n: Also display line number
-v: Must not match.

Attention à bien mettre les caractères entre guillemets pour ne pas qu’ils soient interprétés.

Exemples :

grep host /etc/*.conf
grep -l '\<mai' /usr/include/*.h
grep -n toto /etc/group
grep -vc root /etc/passwd
grep '^user' /etc/passwd
grep '[rR].*' /etc/passwd
grep '\<[rR].*' /etc/passwd

sed[modifier | modifier le wikicode]

Pour appliquer une commande sur le résultat d'une autre.

sed [address1][,address2][!]command[options] [files...]

sed applique la commande de "address1" vers "address2" dans un fichier.

"address1" et "address2" sont au format regex.

Exemples :

sed '1,3s/aa/bb/g' file # Remplace dans le fichier "file" de la ligne 1 à 3 "aa" par "bb".
sed '/here/,$d' file # Efface la ligne de "here" jusqu'à la fin.
sed '/here/d' file # Efface les lignes avec le mot "here".
sed '1,/xxx/p' file # Affiche les lignes de 1 à "xxx".
sed '/ll/,/ff/!s/maison/house/g' file # Replace dans le fichier les mots "maison" par "house", sauf lignes "ll" à "ff".

Exercices[modifier | modifier le wikicode]

  1. Copier tous les fichiers de /etc dans /home/etc/. Puis afficher les contenus de tous les *.conf en remplaçant le mot "host" par "machine".
  2. Afficher les contenus de tous les *.conf qui ne contiennent pas le mot "root". Quelle est la commande qui utilise grep et sed ?
  3. Afficher tous les noms des groupes auxquels root appartient.
  4. Lister tous les noms des groupes de quatre ou cinq caractères de long.
  5. Lister tous les fichiers qui contiennent des caractères sans espace.
  6. Lister dans etc/ tous les fichiers contenant des chiffres.
  7. Afficher avec ls les noms des répertoires dans /.
  8. Faire « ps -aux » et remplacer l'utilisateur "r_polto" par "root", et l'afficher dans un fichier appelé "new_process.txt".
  9. Lister tous les processus appelés "apache" et appartenant à un utilisateur commençant par « p » ou « P ».