======awk et les expressions régulières ====== * Objet : utiliser les expressions régulières avec awk * Niveau requis :{{tag>avisé}} * Commentaires : //Contexte d'utilisation du sujet du tuto. // =====Détail sur les expressions régulières awk===== ====Les modèles de recherche sur les chaînes ==== ^ ^ ^ |**Types**|**Significations**| |''**/ER/**''|Sélectionne la ligne courante lorsqu’une sous chaîne est valide en fonction de l’expression régulière| |''**expression~/ER/**''|Sélectionne la ligne courante si la chaîne “expression” contient une sous chaîne valide en fonction de l’expression régulière| |''**expression!~/ER/**''|Sélectionne la ligne courante si la chaîne “expression” ne contient pas une sous chaîne valide en fonction de l’expression régulière.| Si la chaîne à laquelle on désire soumettre l’expression régulière n’est pas dans la variable prédéfinie ''**$_**'' l’opérateur ''**=~**'' va nous permettre de soumettre l’expression régulière qui se trouve à sa droite à la variable qui se trouve à sa gauche.\\ Le résultat de cette opération est “vrai” si une concordance est trouvée, “faux” sinon. ====Caractères des expressions régulières==== ** Comme avec grep, sed**\\ 1)__ Une expression régulière est toujours placée entre deux slash.__\\ ''**/expression régulière/**'' 2) __Métacaractères: Ce sont des caractères réservés à valeur représentative :__\\ ''**\ ^ $ [ ] | ( ) * + ? ^ $ . \< \> **'' 3) __Si l’on veut exprimer un de ces caractères, il est indispensable de le faire précéder d’un antislash__ ''**\**''.\\ 4) __Utilisation des classes :__\\ * ''**[AEIOU]**'' : Sélection des caractères A, E, I, O, U. * ''**[^AEIOU]**'' : Sélection de tous les caractères sauf A, E, I, O, U. * ''**^[^AEIOU]**'' : Sélection de tous les caractères en début de chaîne sauf A, E, I, O, U. * ''**^[^a-z-]**'' : Sélection de toute chaîne de un caractère n’étant ni une minuscule ni un ''**-**'' * ''**[a-zA-Z][0-9]**'' : Sélection de toute chaîne de deux caractères, une lettre majuscule ou minuscule suivie d’un chiffre. A l’intérieur d’une classe de caractères, tout caractère admet sa signification propre, sauf ''**\**'' et ''**^**'' placé au début, et ''**-**'' entre deux caractères. * ''**[.]**'' : Sélection du caractère ''**.**'' * ''**^[^^]**'' : Sélection de tout caractère en début de chaîne sauf ''**^**''. Il y a deux opérateurs binaires sur les expressions régulières : - l’intersection (et) - l’union (ou) Si r1 et r2 sont deux expressions régulières, alors : * ''**r1 | r2**'' sélectionne toute chaîne validée par **r1 ou par r2** * ''**(r1)(r2)**'' sélectionne toute chaîne de la forme AB, où **r1 valide A et r2 valide B** ====Les opérateurs étendus==== On les appelle aussi "Les opérateurs unaires". Les significations peuvent différées d'avec sed.\\ Les opérateurs ''**+**'' ''*****'' et ''**?**'' sont utilisés pour spécifier des répétitions dans les expressions régulières.\\ * ''**( r )***'' : Toute chaîne consistant en zéro ou n sous chaînes consécutives de modèle r. * ''**( r )+**'' : Toute chaîne consistant en une ou n sous chaînes consécutives de modèle r. * ''**( r )?**'' : Toute chaîne de modèle r ou la chaîne nulle * ''**A***'' : La chaîne nulle ou A ou AA ou AAA ... * ''**Ab*A**'' : La chaîne AA ou AbA ou AbbA ... * ''**Ab?A**'' : La chaîne AA ou AbA * ''**Ab+A**'' : La chaîne AbA ou AbbA ... * ''**Abb*A**'' : La chaîne AbA ou AbbA ... * ''**[A-Z]+**'' : Toute chaîne de une ou plusieurs lettres majuscules. * ''**(AA)+e**'' : La chaîne AAe ou AAAAe ou AAAAAAe =====Application =====