Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Expressions régulières
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]- 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
etsed
? - 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 ».