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

Sur les autres projets Wikimedia :
* « Expression rationnelle » sur Wikipédia
* « regex » sur le Wiktionnaire
* « Modèle:Regex » sur Wikibooks
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

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

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

| 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 :

### Combinaisons de patterns

| 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 :

### Patterns de modification et remplacement

| 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

Pour chercher du texte dans les fichiers.
Options :
Attention à bien mettre les caractères entre guillemets pour ne pas qu’ils soient interprétés.
Exemples :

## sed

Pour appliquer une commande sur le résultat d'une autre.
sed applique la commande de "address1" vers "address2" dans un fichier.
"address1" et "address2" sont au format regex.
Exemples :

## Exercices

* 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".
* Afficher les contenus de tous les *.conf qui ne contiennent pas le mot "root". Quelle est la commande qui utilise grep et sed ?
* Afficher tous les noms des groupes auxquels root appartient.
* Lister tous les noms des groupes de quatre ou cinq caractères de long.
* Lister tous les fichiers qui contiennent des caractères sans espace.
* Lister dans etc/ tous les fichiers contenant des chiffres.
* Afficher avec ls les noms des répertoires dans /.
* Faire « ps -aux » et remplacer l'utilisateur "r_polto" par "root", et l'afficher dans un fichier appelé "new_process.txt".
* Lister tous les processus appelés "apache" et appartenant à un utilisateur commençant par « p » ou « P ».
| Modifier les priorités d'exécution des tâches | Effectuer les modifications de base des fichiers avec vi |