08/11/2019 11:10 1/43 Les expressions rationnelles sous le jour des commandes D
08/11/2019 11:10 1/43 Les expressions rationnelles sous le jour des commandes Documentation - Wiki - http://debian-facile.org/ Les expressions rationnelles sous le jour des commandes Objet : maîtriser les expressions rationnelles basiques et étendues ainsi que les classes POSIX Niveau requis : avise Commentaires : utiliser les expressions rationnelles basiques, étendues, les classes avec grep, grep -E, find, locate, expr, vi, sed et awk. Introduction Il faut savoir en effet : qu'il y a plusieurs types d'expressions rationnelles, celles reposant sur la bibliothèque POSIX celles reposant sur la bibliothèque PCRE. Il s'agira ici de celle de la la bibliothèque POSIX qui sont désignées souvent par les abréviations anglophones REGEX ou REGEXP ; qu'il y a différents programmes qui utilisent les expression régulières ; grep, expr, awk, sed, Perl, Tcl, Python, PHP, Java… Il s'agira ici de ceux utilisables en ligne de commandes GNU/Linux. que certains des métacaractères reconnus par les shells UNIX (bash, ksh, csh, sh, etc.), sont homonymes avec certains caractères des ER, et qui plus est, ils servent le même objectif de fournir des motifs de recherche. Mais ils ne font pas partie de ce qu'on appelle les expressions rationnelles et ne doivent pas être confondus avec elles. que la syntaxe introduisant une ER n'est pas la même d'un programme de ligne de commandes GNU/Linux à l'autre. Enfin, les différents programmes susceptibles d'utiliser toutes les ER de la bibliothèque REGEX, vi, expr, grep, egrep, find, locate, sed, awk, transforment le contexte d'utilisation de l'ER et par conséquent, l'utilisation d'une même ER n'a plus le même effet d'un programme à l'autre. Ces deux derniers points sont rarement mis en avant, il est pourtant crucial de les soulever, pour des raisons autant pédagogiques, que philosophiques. Le fondement en est simplement la certitude que le dédain envers la diversité, tandis que l'entendement est la puissance d'éprouver l'unité cachée sous tout genre de multiple, est une tentative qui s'ignore d'instrumentaliser la raison. En bref, il s'agira de donner accès à l'utilisation des expressions rationnelles POSIX par la ligne de commandes GNU/linux. Les types de REGEX Il y en a trois : expression rationnelle basique (ERb); appelées aussi “Basic Regular Expression” (BRE) Last update: 13/11/2014 14:05 utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes http://debian-facile.org/utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes http://debian-facile.org/ Printed on 08/11/2019 11:10 expression rationnelle étendue (ERe); appelées aussi “Extended Regular Expression” (ERE) les classes POSIX (considérer soit comme ERb, soit comme ERe selon les programmes Les raccourcis (par exemples, retour à la ligne \n, tabulation \t) étant particuliers aux programmes, seront listés en complément. Le détail des expressions régulières est présenté comme ceci : les caractères communs aux ERb et ERe. 1. les caractères spécifiques aux ERb et aux ERe. 2. les classes 3. Panorama exhaustif des programmes GNU/Linux concernés par les expressions rationnelles expr : ERb pour la correspondance de chaîne de caractères avec une expression régulière. grep : ERb sélectionne par la ER, la ou les lignes d'un ou plusieurs fichiers comportant le motif. grep peut aussi rechercher les fichiers contenant le motif. grep -E ou egrep : ERe Même usage que grep find : ERb en le précisant avec l'option -regextype “posix-basic” ou ERe en précisant avec l'option -regextype “posix-extended” rechercher de fichier en fonction du motif spécifié par la ER. locate : ERb avec l'option - -regexp ou ERe avec l'option - -regex recherche de fichiers selon un motif dans la base de données. vi : ERb recherche et substitution de chaîne de caractères. sed : ERb par exemple, sélectionne, modifie les chaînes d'un fichier ou de l'affichage en se basant sur les colonnes. La ER permet de sélectionner quelle(s) colonne(s) est (sont) concernée(s). sed -r : ERe même usage que sed. awk 1) : ERe sélectionne les colonnes, lignes, mots d'un fichier, et modifie l'affichage, le fichier, etc. en utilisant la ER comme condition de l'action qu'on choisit. Concernant chacun de ces programmes, je me limiterai strictement à leur utilisation des ER. Pour plus de détail sur chacun d'entre eux, consulter la documentation à leur sujet. Pour ne plus confondre "métacaractères" du shell et caractères des ER Rappel des caractères du shell servant au "globbing" “métacaractères” significations exemples Les métacaractères du shell (ou joker) 08/11/2019 11:10 3/43 Les expressions rationnelles sous le jour des commandes Documentation - Wiki - http://debian-facile.org/ “métacaractères” significations exemples * n'importe quelle chaîne de n'importe quels caractères ls b* liste b b2 bibi bobo bidule … mais pas titi to … ? un caractère quelconque et un seul rm tit? supprime tito titi tit~ … mais pas tintin titi.txt … les “bracket expression” [ ] un caractère cité dans la liste entre crochets echo [Tt][io]t[io] 2) affiche les fichiers Toto Tito toto toti … mais pas loto … [ - ] [a-z] [A-Z] [A-Z] [0-9] groupe de caractères head t[a-z]to affiche titi tito toto … mais pas tOto t5to Métacaractère ou caractère d'expression rationnelle ? Les commandes de recherche et d'édition de fichiers peuvent utiliser métacaractères et les caractères servant aux expressions rationnelles. Préparation Exécuter cette ligne de commande : Last update: 13/11/2014 14:05 utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes http://debian-facile.org/utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes http://debian-facile.org/ Printed on 08/11/2019 11:10 mkdir ERetCMD/ && cd ERetCMD/ && mkdir Dossier/ &&\ cd Dossier/ && touch milou && touch tata &&\ printf "Toto Titi toto titi tito\ndans\n" > titi &&\ printf "Toto Titi\ndent\n" > titi2 &&\ printf "toto aime le chocolat\n" > toto &&\ printf "Toto titi toto tito\n" > Toto.txt &&\ printf "un copain malin\nmodifiant cette page\n" > tintin &&\ printf "documentation\n" > titi1 && printf "." > titi1.txt &&\ printf "Il manque une option a tito\n" > tito &&\ printf "il a tout mangé.\n" > Toto1.txt ls milou tintin titi1 titi2 toto Toto.txt tata titi titi1.txt tito Toto1.txt Il est nécessaire d'avoir dossier, sous-dossier, et des fichiers ayant ou non du contenu pour s'exercer. Mais pas d'inquiétude, tout ce qui a été créé ou qui le sera, peut être supprimer en une ligne: cd ~ && rm -vfR ERetCMD/ Le dossier et fichiers créés dans le dossier “ERetCMD” au cours de cette partie serviront aux exemples d'utilisation des expressions rationnelles avec chacun des programmes GNU/Linux. Mieux vaut ne pas les supprimer dès la fin de cette partie. grep Rappel sur grep Synopsis : grep [OPTIONS] MOTIF [FICHIER...] grep [OPTIONS] [-e MOTIF | -f FICHIER] [FICHIER...] grep toto ~/Dossier/liste.txt grep “toto” ~/Dossier/liste.txt Les guillemets ne sont pas obligatoires pour un mot Recherche le motif toto dans le fichier “liste.txt” grep toto ~/Dossier/liste.txt /Documents/téléphone.txt Recherche le motif toto dans les fichiers “liste.txt” et “téléphone.txt”. grep “toto et titi” ~/Dossier/liste.txt“ Les guillemets sont obligatoires lorsque MOTIF est une chaîne de caractères espacés d'un ou plusieurs espaces. Options les plus courantes : 08/11/2019 11:10 5/43 Les expressions rationnelles sous le jour des commandes Documentation - Wiki - http://debian-facile.org/ -v affiche les lignes ne contenant pas MOTIF -c compte le nombre de lignes contenant MOTIF -n chaque ligne contenant MOTIF est numérotée -r ou -R (récursif) recherche MOTIF dans tous les fichiers et sous-répertoires -x ligne correspondant exactement à MOTIF -l (par défaut) affiche le nom des fichiers qui contiennent MOTIF -f (par défaut) pour plusieurs fichiers -w recherche du MOTIF exact et non approchant grep -r -w Toto ~/ L'étoile : Imaginons qu'on cherche tous les fichiers commençant par “t” contenant le caractère “e”. grep -lR "e" t* tintin titi1 titi2 tito toto Le motif entre guillemets (“e”) concerne la recherche dans le contenu du fichier. C'est là qu'il faut placer l'expression rationnelle. Le motif “e” en est d'ailleurs une. Le caractère “*” est le métacaractère qui signifie “nom de fichier commençant par “Toto” avec n'importe quel autre caractère après ou rien après. Le caractère ? grep -E "[ae]n.?" titi? Il faut grep -E car le ? fait partie des expressions rationnelles étendues. On peut aussi faire grep ”[ae]n.\?” titi? car grep utilise par défaut les expressions rationnelles basiques qui nécessitent \ devant certains caractères. titi1:documentation titi2:dent On recherche dans les fichiers commençant par titi et suivi d'un seul caractère exactement (?), les mots comportant “an” ou “en”. 3) L'expression rationnelle décrit : une chaîne composée de “a” ou “e”, suivi de “n”, suivi d'un seul caractère ou non. Les crochets ont la même signification en tant que métacaractère et en tant que ER Pour trouver dans les fichiers commençant par “T” ou “t” suivi de “i” ou “o” suivi d'un “t” suivi de “i” ou “o” suivi d'un caractère quelconque et un seul ; Une chaîne comportant “T” ou “t” suivi de “i” ou “o” suivi d'un “t” suivi de “i” ou “o” : Last update: 13/11/2014 14:05 utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes http://debian-facile.org/utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes http://debian-facile.org/ Printed on 08/11/2019 11:10 grep "[Tt][io]t[io]" [Tt][io]t[io]? grep "[Tt][io]t[io]" [Tt][io]t[io]? Le point n'est pas un métacaractère : mais c'est un caractère des expressions rationnelles. Ainsi la ligne signifie : rechercher un point littéral 4) dans les fichiers commençant soit par “T” soit par “t”, suivi de plusieurs caractères, et finissant par “txt” grep "\." [Tt]*.txt titi1.txt:. Toto1.txt:il a tout mangé. find Rappel sur find : find <répertoire de recherche> <critères de recherche> Sans critère de recherche find affiche les fichiers du ou des répertoire(s) de recherche uploads/s3/ les-expressions-rationnelles-sous-le-jour-des-commandes.pdf
Documents similaires










-
34
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 29, 2021
- Catégorie Creative Arts / Ar...
- Langue French
- Taille du fichier 0.5040MB