logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:programmation:shell:regexp [22/09/2013 10:36]
smolski [Les caractères regexp]
doc:programmation:shell:regexp [31/10/2018 15:26]
smolski [Liens]
Ligne 4: Ligne 4:
   * Niveau requis : {{tag>​avisé}}   * Niveau requis : {{tag>​avisé}}
   * Commentaires : //Les caractères spéciaux utilisés dans les commandes en ligne. //   * Commentaires : //Les caractères spéciaux utilisés dans les commandes en ligne. //
-  ​* Débutant, à savoir : [[manuel:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) +  * Suivi :  
-  ​* Suivi : {{tag>​en-chantier à-tester}} +    * Création par [[user>smolski]] le 23/09/2013 
-    * Création par **smolski** 26/08/2013 +    * Testé par [[user>smolski]] ​le 23/09/2013
-    * Testé par <...> le <...>+
   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=1038 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=1038 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
  
-=== Nota === 
  
-Contributeurs,​ les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! 
  
 ===== Utilisation ===== ===== Utilisation =====
  
-Les regexp servent à manipuler des chaines ​de caractères : recherches, expansions, substitutions.+Les regexp servent à manipuler des chaînes ​de caractères : recherches, expansions, substitutions.
  
-Manipuler les chaînes de caractères est essentiel en informatique,​ surtout dans les logiciels libres ( dont internet ! ) qui favorisent dès que possible le texte comme langage commun "​universel"​ entre les machines et l'​homme aussi bien qu'​entre systèmes parfois très différents. \\+Manipuler les chaînes de caractères est essentiel en informatique,​ surtout dans les logiciels libres (dont internet !) qui favorisent dès que possible le texte comme langage commun "​universel"​ entre les machines et l'​homme aussi bien qu'​entre systèmes parfois très différents. \\
 Si tous les fichiers de configuration sont en texte dans les logiciels libres, ce n'est pas par hasard, et s'ils sont souvent en binaire dans les logiciels propriétaires non plus (-_-); . Si tous les fichiers de configuration sont en texte dans les logiciels libres, ce n'est pas par hasard, et s'ils sont souvent en binaire dans les logiciels propriétaires non plus (-_-); .
  
Ligne 29: Ligne 26:
  
 À noter que, concernant le shell (la ligne de commande) vous allez aussi trouver le mot **Glob**. \\ À noter que, concernant le shell (la ligne de commande) vous allez aussi trouver le mot **Glob**. \\
-La nuance est que l'​expression va concerner l'​expansion et non la modification dans les chaines ​de caractère.+La nuance est que l'​expression va concerner l'​expansion et non la modification dans les chaînes ​de caractère.
  
 Vous connaissez sûrement __au moins deux__ des principales expressions Glob mises ici : ''?​ * \ []''​ Vous connaissez sûrement __au moins deux__ des principales expressions Glob mises ici : ''?​ * \ []''​
Ligne 37: Ligne 34:
 ===== Introduction ===== ===== Introduction =====
  
-Les //regexp// des [[manuel:shell]] sont des règles de filtrage permettant de sélectionner des fichiers selon leur nom ou leur emplacement. \\+Les //regexp// des [[:​doc:​programmation:​shell:shell]] sont des règles de filtrage permettant de sélectionner des fichiers selon leur nom ou leur emplacement. \\
 Ces règles ne sont pas transmises au programme tel quel mais sont remplacées par le shell utilisé, aussi, pour la commodité de ce tuto et sauf indication contraire, nous utiliserons ici le shell [[:​doc:​programmation:​bash]]. Ces règles ne sont pas transmises au programme tel quel mais sont remplacées par le shell utilisé, aussi, pour la commodité de ce tuto et sauf indication contraire, nous utiliserons ici le shell [[:​doc:​programmation:​bash]].
  
Ligne 61: Ligne 58:
 Pour ces **regexp**, __différents programmes__ //​utilisent//​ __différentes syntaxes__, de ce fait leurs __symboliques peuvent être différentes__ il faut donc bien distinguer le contexte où interviennent les **regexp**. Pour ces **regexp**, __différents programmes__ //​utilisent//​ __différentes syntaxes__, de ce fait leurs __symboliques peuvent être différentes__ il faut donc bien distinguer le contexte où interviennent les **regexp**.
  
-Par exemple, un **regexp** destiné à l'​utilisation d'une commande [[:​doc:​systeme:​sed]],​ [[:​doc:​systeme:​find]],​ [[:​doc:​systeme:​locate]] ou [[:​doc:​systeme:​grep]],​ devra être écrit différemment que dans le contexte de __l'​utilisation d'une commande **bash**__ (voir : [[commande:les_metacaracteres ​| Bash - Les metacaractères (Pattern - Glob)]]).+Par exemple, un **regexp** destiné à l'​utilisation d'une commande [[:​doc:​systeme:​sed]],​ [[:​doc:​systeme:​find]],​ [[:​doc:​systeme:​locate]] ou [[:​doc:​systeme:​grep]],​ devra être écrit différemment que dans le contexte de __l'​utilisation d'une commande **bash**__ (voir : [[:doc:​programmation:​shell:​les-metacaracteres ​| Bash - Les metacaractères (Pattern - Glob)]]).
  
 //Idem pour des contextes différents...//​ //Idem pour des contextes différents...//​
Ligne 73: Ligne 70:
 == Pour find - locate - grep - sed == == Pour find - locate - grep - sed ==
  
-Avec : ''​pl[oi]p''​ les caractères //​crochets// ​''​[ ]'' ​définissent les **regexp** concernant les chaînes de caractères ''​plop plip''​.+Avec : ''​pl[oi]p''​ les caractères //​crochets// ​<key>[</​key>​ <key></​key>​définissent les **regexp** concernant les chaînes de caractères ''​plop plip''​.
  
 == Pour bash : == == Pour bash : ==
  
 Pour avoir la même expression avec bash, il faudra écrire : ''​pl{o,​i}p''​. \\ Pour avoir la même expression avec bash, il faudra écrire : ''​pl{o,​i}p''​. \\
-Nous voyons donc que dans le contexte **bash**, il faudra utiliser((à la place des caractères //​crochets// ​''​[...]'' ​de l'​exemple précédent)) les caractères //​accolades// ​''​{ }'' ​pour définir les **glob** concernant les mêmes chaînes de caractères ''​plop plip''​.+Nous voyons donc que dans le contexte **bash**, il faudra utiliser((à la place des caractères //​crochets// ​<key>[</​key>​ <key>]</​key>​de l'​exemple précédent)) les caractères //​accolades// ​<key>{</​key>​ <key>}</​key> ​pour définir les **glob** concernant les mêmes chaînes de caractères ''​plop plip''​.
  
 ==== Conclusion ==== ==== Conclusion ====
Ligne 92: Ligne 89:
 ==== Préparation pour executer les TP ==== ==== Préparation pour executer les TP ====
  
-Nous allons ici utiliser [[:​doc:​editeurs:​vim]],​ l'​éditeur fétiche des amoureux du terminal ! ;-)+Nous allons ici utiliser [[:​doc:​editeurs:vim:vim]], l'​éditeur fétiche des amoureux du terminal ! ;-)
  
 Pour réaliser les TP mis en exemple dans ce tuto, il vous faut préparer ces répertoires et fichiers. \\ Pour réaliser les TP mis en exemple dans ce tuto, il vous faut préparer ces répertoires et fichiers. \\
Ligne 154: Ligne 151:
  
 Ainsi la combinaison : ''​\.''​((anti-slash point)) reconnaît simplement ''​.''​((point)) \\ Ainsi la combinaison : ''​\.''​((anti-slash point)) reconnaît simplement ''​.''​((point)) \\
 +
 Comme la combinaison : ''​\\''​((anti-slash antislash)) reconnaît ''​\''​((anti-slash)) \\ Comme la combinaison : ''​\\''​((anti-slash antislash)) reconnaît ''​\''​((anti-slash)) \\
 +
 Ou encore la combinaison : ''​\\\.''​((anti-slash anti-slash anti-slash point)) reconnaît \.((anti-slash point)) Ou encore la combinaison : ''​\\\.''​((anti-slash anti-slash anti-slash point)) reconnaît \.((anti-slash point))
  
 //Eh oui !// :-D //Eh oui !// :-D
  
 +==== Les caractères répétition ====
  
 +Quand on ne sait pas combien de fois un caractère va apparaître,​ on l'​indique avec une étoile * \\
  
-===== Liens utiles ​: =====+**Exemple** : \\ 
 +''​Ah*''​ reconnaît aussi bien « Ah » que « Ahhhhhhhhhhhhhhhhhhhhhhhhhh » ou même « A » 
 + 
 +Quand on ne sait pas si un caractère va apparaître une fois ou jamais, on l'​indique avec un point d'​interrogation échappé ''​\?''​ \\ 
 + 
 +**Exemple** : \\ 
 + 
 +La **REGEXP** : ''​Chevals\?''​ reconnaît aussi bien « Cheval » que « Chevals ». \\ 
 + 
 +Autre exemple : ''​coq\?​uille''​  
 + 
 +==== Les ensembles de caractères possibles ​==== 
 + 
 +''​Par[lt]ez''​ reconnaît aussi bien « Parlez » que « Partez ». \\ 
 + 
 +''​[a-z]''​ reconnaît n'​importe quelle lettre minuscule (non altérée)2) de l'​alphabet. \\ 
 + 
 +''​[A-Za-z]''​ reconnaît n'​importe quelle lettre (non altérée) de l'​alphabet. \\ 
 + 
 +''​[0-9\-]''​ reconnaît les chiffres et le caractère « - ». 
 + 
 +=== Remarque ​=== 
 +Il y a aussi des classes de caractères déjà prédéfinies. 
 + 
 +**Tableau des classes prédéfinies** [[http://​www.commentcamarche.net/​contents/​php/​phpreg.php3 | Source]] (merci titia) :-) 
 +^  classe ​ ^   ​Resultat ​  ^ 
 +|[:alnum:] |  caractères alphanumériques (équivalent à [A-Za-z0-9])| 
 +|[:alpha:] |  caractères alphabétiques ([A-Za-z])| 
 +|[:blank:] |  caractères blanc (espace, tabulation)| 
 +|[:ctrl:] |  caractères de contrôle (les premiers du code ASCII| 
 +|[:digit:] |  chiffre ([0-9])| 
 +|[:graph:] |  caractère d'​imprimerie (qui fait une marque sur l'​écran en quelque sorte)| 
 +|[:print:] |  caractère imprimable (qui passe à l'​imprimante ... tout sauf les caractères de contrôle)| 
 +|[:punct:] |  caractère de ponctuation| 
 +|[:space:] |  caractère d'​espacement| 
 +|[:upper:] |  caractère majuscule| 
 +|[:xdigit:] |  caractère hexadécimal| 
 + 
 +==== Les caractères interdits ==== 
 + 
 +''​[^x]''​ reconnaît tous les caractères sauf « x » \\ 
 + 
 +''​[^xy]''​ reconnaît tous les caractères sauf « x » et « y » \\ 
 + 
 +''​[^a-z]''​ reconnaît tous les caractères sauf les lettres minuscules non altérées 
 + 
 +==== Début et fin de ligne ==== 
 + 
 +''​^''​ désigne un début de ligne \\ 
 + 
 +''​$''​ désigne une fin de ligne 
 + 
 +**Exemple :** 
 + 
 +''​^Pouet''​ reconnaîtra le motif //Pouet// s'il se trouve en début de ligne. \\ 
 + 
 +''​^$''​ identifie une ligne vide. 
 + 
 + 
 +==== Combinaisons ==== 
 + 
 +''​[ab]*''​ comme [ab] reconnaît aussi bien « a » que « b », [ab]* reconnaît aussi bien « aaaaaaaaa » que « abababbbbbbbbb » ou que « babbbaaa » \\ 
 + 
 +''​Abra*[ca]*dabrante\?''​ reconnaît les chaînes commençant par « Abr », suivi par un nombre quelconque de « a », puis un nombre quelconque de « c » et de « a » suivis par « dabrant », suivi ou non par « e ». 
 + 
 +''​[^0-9]toto''​ identifie les lignes contenant une chaîne toto et le premier caractère ne doit pas être un chiffre, par exemple : **atoto**, **gtoto** mais pas **1toto**, 5toto. 
 + 
 +Et : 
 + 
 +[^a-zA-Z] n'​importe quel caractère sauf une lettre minuscule ou majuscule. \\ 
 +Ici, attention où vous placez le point circonflexe ''​^'',​ si vous tapez [1-3^], c'est désigner uniquement les caractères ''​1 2, 3 et ^''​.  
 + 
 +D'une manière plus générale voici comment ''​[ ]''​ et ''​(-)''​ peuvent être utilisés : 
 + 
 +''​[A-D]''​ intervalle de A à D (A, B, C, D) par exemple **bof[A-D]** donne //bofA, bofB, bofC, bofD// 
 + 
 +''​[2-5]''​ intervalle de 2 à 5 (2, 3, 4, 5) par exemple **12[2-5]2** donne //1222, 1232, 1242, 1252// 
 + 
 +[''​2-56]''​ intervalle de 2 à 5 et 6 (//et non pas 56//) (2, 3, 4, 5, 6) par exemple **12[2-56]2** ​ donne //1222, 1232, 1242, 1252, 1262// 
 + 
 +''​a-dA-D]''​ intervalle de a à d et A à D (a, b, c, d, A, B, C, D) par exemple **z[a-dA-D]y** donne //zay, zby, zcy, zdy, zAy, zBy, zCy, zDy// 
 + 
 +''​[1-3-]''​ intervalle de 1 à 3 et - (1, 2, 3, -) par exemple **[1-3-]3** donne //13, 23, 33, -3// 
 + 
 +''​[a-cI-K1-3]''​ intervalle de a à c, I à K et 1 à 3 (//a, b, c, I, J, K, 1, 2, 3//) 
 + 
 + 
 +===== Liens =====
  
-  * http://​wiki.chezlefab.net/​tuto_nix/​regexp Une explication détaillée mise à la disposition des débutants. 
   * [[http://​www.emse.fr/​~mbeig/​COURS/​UNIX2002/​unix_28.html]]   * [[http://​www.emse.fr/​~mbeig/​COURS/​UNIX2002/​unix_28.html]]
   * [[http://​cyberzoide.developpez.com/​unix/​sys.php3#​metachar]]   * [[http://​cyberzoide.developpez.com/​unix/​sys.php3#​metachar]]
 +  * [[http://​www.funix.org/​fr/​unix/​expr-sed.htm]]
 +
 +
  
  
  
doc/programmation/shell/regexp.txt · Dernière modification: 05/07/2023 11:44 par Croutons

Pied de page des forums

Propulsé par FluxBB