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
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [15/08/2014 10:24]
Hypathie [Les expressions rationnelles basiques et les commandes GNU/Linux]
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [15/08/2014 17:24]
Hypathie [Introduction]
Ligne 23: Ligne 23:
 Ce dernier point est rarement mis en avant, il est pourtant crucial de le 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. ​ Ce dernier point est rarement mis en avant, il est pourtant crucial de le 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. ​
  
-**Pour en prendre le contre-pied,​ cette présentation des expressions rationnelles souhaite éclairer leurs divers utilisations ainsi que la nécessité de leurs diversités,​ en les exposant du point de vue des commandes de recherches et d'​édition de fichiers GNU/​linux.**\\  +**En bref, il s'​agira de donner accès à l'​utilisation,​ en ligne de commandes GNU/linux, des expressions rationnelles POSIX de la bibliothèque REGEX.**
- +
-**En bref, il s'​agira de donner accès à l'​utilisation,​ en ligne de commandes ​ou dans des scripts shell GNU/linux, des expressions rationnelles POSIX de la bibliothèque REGEX.**+
  
 ====Les types de ER ==== ====Les types de ER ====
Ligne 37: Ligne 35:
  
 Les raccourcis (par exemples, retour à la ligne ''​\n'',​ tabulation ''​\t''​) étant particuliers aux programmes, seront listés en complément. 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é ainsi :**
 +  - **[[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes?&#​caracteres-communs-aux-erb-et-ere|les caractères communs aux ERb et ERe]].**
 +  - **les caractères spécifiques [[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes?&#​caracteres-specifiques-aux-erb|aux ERb]] et [[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes?&#​caracteres-specifiques-aux-ere|aux ERe]].**
 +  - **[[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes?&#​les-classes|les classes]]**
  
 ==== Panorama exhaustif des programmes GNU/Linux concernés par les expressions rationnelles=== ==== Panorama exhaustif des programmes GNU/Linux concernés par les expressions rationnelles===
Ligne 64: Ligne 67:
 |**''​[ ]''​** |un caractère cité dans la liste entre crochets |''​echo [Tt][io]t[io]''​((echo "Toto Tito toto toti tito loto" | echo [Tt][io]t[io]))\\ **affiche les fichiers**\\ Toto\\ Tito\\ toto\\ toti\\ ...\\ **mais pas**\\ loto\\ ... | |**''​[ ]''​** |un caractère cité dans la liste entre crochets |''​echo [Tt][io]t[io]''​((echo "Toto Tito toto toti tito loto" | echo [Tt][io]t[io]))\\ **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\\ | |**''​[ - ]''​**\\ [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=== ===Préparation===
Ligne 96: Ligne 103:
 </​note>​ </​note>​
  
-===Métacaractère ou caractère d'​expression rationnelle ?===+===grep===
  
   * __L'​étoile__ :   * __L'​étoile__ :
Ligne 149: Ligne 156:
 Toto1.txt:​il a tout mangé. Toto1.txt:​il a tout mangé.
 </​code>​ </​code>​
- 
-====Métacaractères du shell et commandes utilisant les expressions rationnelles==== 
- 
-Parmi les commandes GNU/Linux utilisant les expressions rationnelles,​ d'​autres commandes que **grep** ou **grep -E** utilisent aussi les métacaractères.\\ ​ 
- 
-Il s'agit de **find** et **locate**. 
  
 === find=== === find===
Ligne 301: Ligne 302:
 ou '':​previous'',​ si l'on se trouve devant le second et qu'on veut revenir au premier. ou '':​previous'',​ si l'on se trouve devant le second et qu'on veut revenir au premier.
  
-D'​autres exemples ​un peu plus détaillés sur [[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes#​la-commande-sed-et-les-caracteres-communs-aux-erb-et-ere|sed]],​ [[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes#​awk-et-les-caracteres-communs-aux-erb-et-ere|awk]] et [[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes#​l-editeur-de-texte-vi-n-utilise-aussi-que-les-erb|vim]] seront donnés.+D'​autres exemples ​d'​utilisation ​des expressions rationnelles avec [[utilisateurs:​hypathie:​tutos:​erb-et-ere-par-le-contexte-des-commandes#​l-editeur-de-texte-vi-n-utilise-aussi-que-les-erb|vim]] seront donnés.
 </​note>​ </​note>​
  
Ligne 309: Ligne 310:
 ====Caractères communs aux ERb et ERe==== ====Caractères communs aux ERb et ERe====
 <note tip> <note tip>
-  * Certains caractères sont communs au ERb et ERe.\\ ​Pour ne pas avoir à les répéter, il est préférable ​de les regrouper. D'​autant plus que les commandes qui permettent de se servir des expressions rationnelles,​ reconnaissent tous les caractères communs aux ERb et ERe.+  * Certains caractères sont communs au ERb et ERe.\\ ​Il est possible ​de les regrouper ​car toutes ​les commandes qui permettent de se servir des expressions rationnelles,​ reconnaissent tous les caractères communs aux ERb et ERe.
  
-  * Certaines commandes utilisent soit les ERb soit les ERe en fonction d'​option ​:\\ il s'agit de **''​grep''​** ; **''​sed''​** ; **''​locate''​** ; et **''​find''​**.+  * Certaines commandes ​les utilisent soit en tant que ERbsoit en tant que ERe :\\ il s'agit de **''​grep''​** ; **''​sed''​** ; **''​locate''​** ; et **''​find''​**.
  
-  * **''​awk''​** (gawk) ​utilise ​les ERe.+  * **''​awk''​** (gawk) les utilise en tant que ERe.
  
-  * **''​vi''​** (vim) et **''​expr''​** ​n'utilisent que les ERb.+  * **''​vi''​** (vim) et **''​expr''​** ​les utilisent ​en tant que ERb.
  
 </​note>​ </​note>​
Ligne 376: Ligne 377:
   1 2 Francine   1 2 Francine
   3 4 Géraldine   3 4 Géraldine
 +  tout le monde
   4 5 Béatrice   4 5 Béatrice
   5 6 Christelle   5 6 Christelle
Ligne 409: Ligne 411:
 >Encore une fois, il ne s'agit pas du métacaractère. ​ >Encore une fois, il ne s'agit pas du métacaractère. ​
 >Étoile signifie "zéro ou plusieurs '​A'"​ ; **zéro** fois aussi. Donc toutes les lignes dépourvues du caractère "​A"​ apparaissent,​ __y compris la ligne vide__. >Étoile signifie "zéro ou plusieurs '​A'"​ ; **zéro** fois aussi. Donc toutes les lignes dépourvues du caractère "​A"​ apparaissent,​ __y compris la ligne vide__.
 +
 +  * __Autre exemple :__
  
 <code user>​grep "123 A*" liste1-nom</​code>​ <code user>​grep "123 A*" liste1-nom</​code>​
Ligne 422: Ligne 426:
   4 5 Béatrice   4 5 Béatrice
  
->les lignes comportant 4 ou 3+>Les lignes comportant 4 ou 3
  
 ===Le caractère d'​exclusion d'une liste [^ ]=== ===Le caractère d'​exclusion d'une liste [^ ]===
Ligne 434: Ligne 438:
   toutefois   toutefois
  
-  *Chaîne qui ne se termine pas l'un des caractères de l'​intervalle. ​+  *Chaîne qui ne se termine pas par l'un des caractères de l'​intervalle. ​
 <code user>​grep "​[^a-z]$"​ liste1-nom</​code>​ <code user>​grep "​[^a-z]$"​ liste1-nom</​code>​
  
Ligne 446: Ligne 450:
  
 ===Le caractère fin de mot \>=== ===Le caractère fin de mot \>===
-<code user>​grep "​fois\>"​ liste1-nom </​code>​+<code user>​grep "​fois\>"​ liste1-nom</​code>​
  
   toutefois   toutefois
  
-  *Un mot exactement \<​mot\>​+  * __Et un mot exactement \<​mot\> ​:__ 
 <code user>​grep "​\<​tout\>"​ liste1-nom</​code>​ <code user>​grep "​\<​tout\>"​ liste1-nom</​code>​
  
Ligne 491: Ligne 496:
  
  
-  * Soit le __répertoire parent__ ​des fichiers ​listés ci-dessous ​:+  * Rappel ​des fichiers ​contenus dans "​~/​ERetCMD/"​: 
 <​code>​ls</​code>​ <​code>​ls</​code>​
 <​code>​ <​code>​
-Dossier ​      liste1-nom~     server-0.xkb    ​sort2.txt +Dossier       img-perso-2.jpg ​ liste2-nom      server-0.xkb 
-essai.grep2~ ​ liste2-nom      ​smolski-exo-sed.txt  ​sort3.txt +image linux - 01.jpg  liste  ​      ​liste3-erb-ere  ​smolski-exo-sed.txt 
-liste1-nom ​   ​liste3-erb-ere ​ sort1.txt    xxx-sort.txt+image linux - 02.jpg ​ liste1  ​      ​liste4-spec ​    sort1.txt 
 +image linux - 03.jpg  ​liste1-nom ​      liste4-vim      sort2.txt 
 +img-perso-1.jpg ​      ​liste2  ​      ​liste-class ​    sort3.txt
 </​code>​ </​code>​
  
-  * caractères ​point et étoiles :+  * __Caractères ​point et étoiles :__
  
 <​code>​find -regextype "​posix-basic"​ -regex "​.*/​li.*m"</​code>​ <​code>​find -regextype "​posix-basic"​ -regex "​.*/​li.*m"</​code>​
Ligne 505: Ligne 513:
 ./​liste2-nom ./​liste2-nom
 ./​liste1-nom ./​liste1-nom
 +./​liste4-vim
 </​code>​ </​code>​
  
Ligne 513: Ligne 522:
 <​code>​find -regextype "​posix-basic"​ -regex "​.*/​li.*m"</​code>​ <​code>​find -regextype "​posix-basic"​ -regex "​.*/​li.*m"</​code>​
 <​code>​ <​code>​
-./ERetCMD/​liste2-nom +./​liste2-nom 
-./ERetCMD/liste1-nom+./​liste1-nom 
 +./​liste4-vim
 ./​.config/​libreoffice/​3/​user/​gallery/​sg100.thm ./​.config/​libreoffice/​3/​user/​gallery/​sg100.thm
 ./​.config/​libreoffice/​3/​user/​gallery/​sg30.thm ./​.config/​libreoffice/​3/​user/​gallery/​sg30.thm
 </​code>​ </​code>​
  
-  *Avec les crochets :+  * __Avec ​les crochets :__
  
->​fichiers comportant un "​e"​ ou un "​s",​ plusieurs caractères,​ un point littéral (\.), plusieurs caractères :+>Dans le répertoire "​~/​ERetCMD/",​ les fichiers comportant un "​e"​ ou un "​s",​ plusieurs caractères,​ un point littéral (\.), plusieurs caractères :
  
 <code user>​find -regextype "​posix-basic"​ -regex "​.*/​[es].*\..*"</​code>​ <code user>​find -regextype "​posix-basic"​ -regex "​.*/​[es].*\..*"</​code>​
 <​code>​ <​code>​
 +./​Dossier/​smolski-sed.txt
 +./​Dossier/​smolski-awk.txt
 ./​smolski-exo-sed.txt ./​smolski-exo-sed.txt
 ./​server-0.xkb ./​server-0.xkb
 ./sort3.txt ./sort3.txt
 ./sort1.txt ./sort1.txt
-./​essai.grep2~ 
 ./sort2.txt ./sort2.txt
 </​code>​ </​code>​
Ligne 562: Ligne 573:
  
  
-  *Contrairement à find, __il n'est pas nécessaire que la ER corresponde au chemin absolu d'un fichier__.\\ ​+  * Contrairement à find, __il n'est pas nécessaire que la ER corresponde au chemin absolu d'un fichier__.\\ ​
 Mais la quantité de réponses peut être très élevée, et si l'on a une idée du répertoire dans lequel se trouve le fichier recherché, il peut plus confortable de le préciser.\\ ​ Mais la quantité de réponses peut être très élevée, et si l'on a une idée du répertoire dans lequel se trouve le fichier recherché, il peut plus confortable de le préciser.\\ ​
 On peut aussi filtrer le retour avec grep.\\ ​ On peut aussi filtrer le retour avec grep.\\ ​
Ligne 568: Ligne 579:
   * Enfin, avec l'​utilisation de locate, le caractère début (^) est inusité.\\ ​   * Enfin, avec l'​utilisation de locate, le caractère début (^) est inusité.\\ ​
  
-En effet, avec une commande qui recherche des noms de fichier, la seule possibilité serait **''​^/''​**. Or locate permet justement de ne pas avoir à donner le chemin absolu du fichier recherché. L'​utiliser ne ferait qu'​allonger inutilement l'​expression régulière !+En effet, avec une commande qui recherche des noms de fichier, la seule possibilité serait **''​^/''​**. Or locate permet justement de ne pas avoir à donner le chemin absolu du fichier recherché. L'​utiliser ne ferait qu'​allonger inutilement l'​expression régulière !\\ 
 </​note>​ </​note>​
  
-  ​Étoile ​et point+<code root>​updatedb</​code>​ 
 + 
 +  ​__Étoile ​et point :__ 
 + 
 +>Éviter ce qui suit qui donne un retour de plusieurs pages : 
 <code user>​locate --regexp '/​home.*[Tt]o.*'</​code>​ <code user>​locate --regexp '/​home.*[Tt]o.*'</​code>​
  
->Donne un retour de plusieurs pages.+On peut faire par exemple :
  
 <code user>​locate --regexp '/​home.*[Tt]o.*'​ | grep "/​Dossier/"</​code>​ <code user>​locate --regexp '/​home.*[Tt]o.*'​ | grep "/​Dossier/"</​code>​
Ligne 582: Ligne 598:
 /​home/​hypathie/​ERetCMD/​Dossier/​tito /​home/​hypathie/​ERetCMD/​Dossier/​tito
 /​home/​hypathie/​ERetCMD/​Dossier/​toto /​home/​hypathie/​ERetCMD/​Dossier/​toto
-/​home/​hypathie/​ERetCMD/​Dossier/​toto. 
 </​code>​ </​code>​
  
-  * caractère ​fin de ligne $ :+  * __Caractère ​fin de ligne $ :__ 
 <code user>​locate --regexp '/​home.*/​Dossier/​[Tt]o.*\.txt$'</​code>​ <code user>​locate --regexp '/​home.*/​Dossier/​[Tt]o.*\.txt$'</​code>​
 <​code>​ <​code>​
Ligne 592: Ligne 608:
 </​code>​ </​code>​
  
-  * Le caractère début de mot ''​\<''​ :+  * __Le caractère début de mot ''​\<''​ :__ 
 <code user>​locate --regexp '​.*\<​smolski.*'</​code>​ <code user>​locate --regexp '​.*\<​smolski.*'</​code>​
 <​code>​ <​code>​
 /​home/​hypathie/​ERetCMD/​smolski-exo-sed.txt /​home/​hypathie/​ERetCMD/​smolski-exo-sed.txt
 +/​home/​hypathie/​ERetCMD/​Dossier/​smolski-awk.txt
 +/​home/​hypathie/​ERetCMD/​Dossier/​smolski-sed.txt
 </​code>​ </​code>​
  
 ====La commande sed et les caractères communs aux ERb et ERe==== ====La commande sed et les caractères communs aux ERb et ERe====
  
 +<​note>​
 Pour les caractères considérés ci-dessus, ''​. ; *, ^, $, [liste de caractères],​ [^liste de caractères],​ \<, \>'',​\\ ​ Pour les caractères considérés ci-dessus, ''​. ; *, ^, $, [liste de caractères],​ [^liste de caractères],​ \<, \>'',​\\ ​
  __il en va de même pour la commande sed que pour la commande grep__.\\ ​  __il en va de même pour la commande sed que pour la commande grep__.\\ ​
 Je ne donnerai que quelques exemples.\\ ​ Je ne donnerai que quelques exemples.\\ ​
 Il est à noter que sans l'​option -i, les exemples ne modifieront pas le fichier.\\ ​ Il est à noter que sans l'​option -i, les exemples ne modifieront pas le fichier.\\ ​
-Comme grep pour les caractères vues jusqu'​ici :+</​note>​
  
-  ​Les caractère début et fin de ligne : +En étant au niveau du répertoire : "​~/​ERetCMD/"​. 
-Par exemple, supprimer la ligne vide :+ 
 +  ​__Les caractère début et fin de ligne :__ 
 + 
 +Par exemple, ​pour supprimer la ligne vide à l'​affichage ​:
  
 <code user>sed '/^$/ d' liste1-nom</​code>​ <code user>sed '/^$/ d' liste1-nom</​code>​
  
  
-  * Le caractère étoile :+  * __Le caractère étoile :__ 
 Par exemple, substituer "​AAAAAA"​ par abc  Par exemple, substituer "​AAAAAA"​ par abc 
  
Ligne 629: Ligne 653:
   6 8 Amanda   6 8 Amanda
  
-  * Le caractère fin de mot : +  * __Le caractère fin de mot :__ 
-Par exemple, tout supprimer sauf (''​!''​)((relève du vocabulaire de sed, et n'est pas un caractère appartenant aux ER)) la ligne correspondant à un mot finissant par "​fois"​+ 
 +Par exemple, tout supprimer sauf (''​!''​)((relève du vocabulaire de sed, et n'est pas un caractère appartenant aux ER)) la ligne correspondant à un mot finissant par "​fois" ​
 <code user>sed '/​fois\>/​ !d' liste1-nom</​code>​ <code user>sed '/​fois\>/​ !d' liste1-nom</​code>​
  
Ligne 636: Ligne 662:
  
 ===Attention au sens global de la ER donné par la commande=== ===Attention au sens global de la ER donné par la commande===
 +
 Si la signification des caractère est la même, l'​action de la commande modifie "la phrase",​ ou le sens global de la //​ER//​.\\ ​ Si la signification des caractère est la même, l'​action de la commande modifie "la phrase",​ ou le sens global de la //​ER//​.\\ ​
 Comparer l'​usage des [^ ] de grep avec ce qui suit : Comparer l'​usage des [^ ] de grep avec ce qui suit :
Ligne 660: Ligne 687:
  
 ====awk et les caractères communs aux ERb et ERe ==== ====awk et les caractères communs aux ERb et ERe ====
 +
 La commande awk travail sur les colonnes, les lignes, les mots, et constitue un langage de programmation. Je ne rappellerai pas toutes les fonctions de awk mais présenterai seulement comment utiliser les //ER// pour une utilisation basique de cette commande.\\ ​ La commande awk travail sur les colonnes, les lignes, les mots, et constitue un langage de programmation. Je ne rappellerai pas toutes les fonctions de awk mais présenterai seulement comment utiliser les //ER// pour une utilisation basique de cette commande.\\ ​
 L'​usage le plus simple d'awk consiste à utiliser une //ER// pour sélectionner une chaîne.\\ ​ L'​usage le plus simple d'awk consiste à utiliser une //ER// pour sélectionner une chaîne.\\ ​
Ligne 666: Ligne 694:
 Avec awk la //ER// est encadrée par des slash ''/​ER/''​. Avec awk la //ER// est encadrée par des slash ''/​ER/''​.
  
-===L'​étoile ​===+  * __L'​étoile ​:__ 
 <code user>​echo "123 AAAAAA"​ | awk '/​A*/​{print $2}'</​code>​ <code user>​echo "123 AAAAAA"​ | awk '/​A*/​{print $2}'</​code>​
  
Ligne 705: Ligne 734:
 </​note>​ </​note>​
  
-===le caractère début de ligne (^) === +  * __Le caractère début de ligne (^) :__ 
-  * Rappel ​du fichier "​liste1-nom"​ dont la dernière ligne est vide :+ 
 +Visualisation ​du fichier "​liste1-nom"​ dont la dernière ligne est vide :
 <code user>cat liste1-nom</​code>​ <code user>cat liste1-nom</​code>​
 <​code>​ <​code>​
Ligne 740: Ligne 770:
 </​note>​ </​note>​
  
-===caractère ​fin de ligne ($) ===+  * __Caractère ​fin de ligne ($) :__ 
 <​code>​awk '$3 ~ /ce$/' liste1-nom</​code>​ <​code>​awk '$3 ~ /ce$/' liste1-nom</​code>​
  
   4 5 Béatrice   4 5 Béatrice
  
-===Caractère ​point et étoile ​===+  * __Caractères ​point et étoile ​:__ 
 <code user>awk '$3 ~ /​.d.*/'​ liste1-nom</​code>​ <code user>awk '$3 ~ /​.d.*/'​ liste1-nom</​code>​
  
Ligne 757: Ligne 789:
 </​code>​ </​code>​
  
-===Les ​crochets ​=== +  * __Les crochets ​:__ 
-<code user> + 
-awk '$3 ~/​t[h]/'​ liste1-nom</​code>​+<code user>awk '$3 ~/​t[h]/'​ liste1-nom</​code>​
  
 >Affiche la ou les lignes dont la chaîne correspond à la //ER// "​t"​ ou "​th"​ >Affiche la ou les lignes dont la chaîne correspond à la //ER// "​t"​ ou "​th"​
Ligne 766: Ligne 798:
   5 7 Dorothée   5 7 Dorothée
  
-===exclusion ​[^ ] ===+  * __Exclusion ​[^ ] :__ 
 <code user>awk '$1 ~ /​^[^12345678]/'​ liste1-nom</​code>​ <code user>awk '$1 ~ /​^[^12345678]/'​ liste1-nom</​code>​
 <​code>​ <​code>​
Ligne 787: Ligne 820:
 > La seule différence entre ''​$1 ~ /​^[^12345678]/''​ et ''​$1 !~ /​^[12345678]/'',​ c'est que la deuxième //ER// affichera une ligne vide, et non la première. > La seule différence entre ''​$1 ~ /​^[^12345678]/''​ et ''​$1 !~ /​^[12345678]/'',​ c'est que la deuxième //ER// affichera une ligne vide, et non la première.
  
-===Début ​et fin de mot===+  * __Début ​et fin de mot :__
  
 <code user>awk '$1 ~ /​fois\>/'​ liste1-nom</​code>​ <code user>awk '$1 ~ /​fois\>/'​ liste1-nom</​code>​
Ligne 795: Ligne 828:
  
 ====La commande expr n'​utilise que ERb==== ====La commande expr n'​utilise que ERb====
-===Préparation === +
-Soit le fichier "<​nowiki>​liste4-spec</​nowiki>"​ : +
-<code user>cat liste4-spec</​code>​ +
-<​code>​ +
-gdd:​a:​aa:​aaa:​aaaa:​aaaaaa:​aaaaaaaa +
-T5c Kc5 T5 c E2* abcd 7 9Abcd +
-7 1AAA.AAA.bcdef aBcd6a 123* +
-abc2356.99 +
-73000|Savoie +
-123456 +
-1234567 +
-index-tel|04|Rhône-Alpe +
--15 +36 5687 {15} exemple{36} +
-il y a un truc et un truc et encore un truc et une chose +
-choses et trucs ne font pas bon ménage +
-123.3456.abc +
-trucschosetruc +
-tructructrucs +
-chosechosechose +
-</​code>​+
 ===Syntaxe === ===Syntaxe ===
  
Ligne 826: Ligne 840:
   * L'​expression rationnelle est comparée par rapport au début de la variable, le caractère **''​^''​** est toujours implicite.   * L'​expression rationnelle est comparée par rapport au début de la variable, le caractère **''​^''​** est toujours implicite.
   * Si une partie de l'​expression rationnelle est mémorisée avec **''​\( \)''​** la commande expr affiche dans le terminal la partie correspondante.   * Si une partie de l'​expression rationnelle est mémorisée avec **''​\( \)''​** la commande expr affiche dans le terminal la partie correspondante.
- 
  
 </​note>​ </​note>​
Ligne 862: Ligne 875:
 </​code>​ </​code>​
  
-> Le chiffre "​1"​ est le code de retour.+> Le chiffre "​1"​ est le code de retour ​: pas de correspondance,​ donc code d'​erreur.
  
   * sous chaîne avec caractère fin de mot :   * sous chaîne avec caractère fin de mot :
Ligne 876: Ligne 889:
 ====L'​éditeur de texte vi n'​utilise aussi que les ERb ==== ====L'​éditeur de texte vi n'​utilise aussi que les ERb ====
  
-===Préparation === +===Préparation ​du fichier "​liste4-spec" ​=== 
-<code user>cat liste4-vim</code> + 
-<code> +  * Donner le contenu suivant au fichier "​liste4-spec"​ en faisant : 
-Kc5 T5 c E2* abcd 7 9Abcd+ 
 +<code user>cd ~/ERetCMD/ && ​cat >> ​liste4-spec <<EOF 
 +gdd:​a:​aa:​aaa:​aaaa:​aaaaaa:​aaaaaaaa 
 +T5c Kc5 T5 c E2* abcd 7 9Abcd
 7 1AAA.AAA.bcdef aBcd6a 123* 7 1AAA.AAA.bcdef aBcd6a 123*
 abc2356.99 abc2356.99
 73000|Savoie 73000|Savoie
 +123456
 +1234567
 index-tel|04|Rhône-Alpe index-tel|04|Rhône-Alpe
 -15 +36 5687 {15} exemple{36} -15 +36 5687 {15} exemple{36}
 il y a un truc et un truc et encore un truc et une chose il y a un truc et un truc et encore un truc et une chose
-chose et truc ne font pas bon ménage+choses ​et trucs ne font pas bon ménage
 123.3456.abc 123.3456.abc
-trucchosetruc +trucschosetruc 
-tructructruc+tructructrucs
 chosechosechose chosechosechose
 +EOF
 </​code>​ </​code>​
  
Ligne 917: Ligne 936:
 </​note>​ </​note>​
  
-  * Éditer le fichier "​liste4-vim" ​+  * Éditer le fichier "​liste4-vim" ​en faisant ​:
-  * Pour éditer le fichier avec vi ou vim :+
  
-<code user>vi liste4-vim</​code>​+<code user>vi liste4-spec</​code>​
 ou  ou 
-<code user>vim liste4-vim</​code>​+<code user>vim liste4-spec</​code>​
  
 {{http://​pix.toile-libre.org/​upload/​original/​1407922486.png?​400}} {{http://​pix.toile-libre.org/​upload/​original/​1407922486.png?​400}}
Ligne 957: Ligne 975:
  
 ===Exemples de recherches === ===Exemples de recherches ===
-  ​le caractère début de ligne ^+ 
 +  ​__Le caractère début de ligne ^ __ 
 <​code>​ <​code>​
 /^chose /^chose
Ligne 963: Ligne 983:
 On appuie sur la touche shift+: pour inscrire ''/'',​ on inscrit sa ER, on valide avec la touche "​entrée"​. vi ou vim surligne toutes les occurrences de "​chose"​ qui sont en début de ligne. On appuie sur la touche shift+: pour inscrire ''/'',​ on inscrit sa ER, on valide avec la touche "​entrée"​. vi ou vim surligne toutes les occurrences de "​chose"​ qui sont en début de ligne.
  
-<​code>​nohlsearch</​code>​+<​code>​:nohlsearch</​code>​
 Pour retirer la surbrillance de la recherche. Pour retirer la surbrillance de la recherche.
  
-  * le caractère fin de ligne $+  * __Le caractère fin de ligne $__ 
 <​code>​ <​code>​
 /chose$ /chose$
 </​code>​ </​code>​
-On valide avec entrée, et ''​nohlsearch''​ pour effacer +On valide avec entrée, et ''​:nohlsearch''​ pour effacer
- +
  
 ===Exemples de substitution=== ===Exemples de substitution===
  
-  * crochets ​:+  * __Crochets ​:__ 
 <​code>​ <​code>​
 :​s/​[Ss]/​XXX/​g :​s/​[Ss]/​XXX/​g
 </​code>​ </​code>​
 +
 >​Substitue les caractères "​S"​ ou "​s"​ à la ligne du curseur et surligne toutes les occurrences potentiellement substituables. >​Substitue les caractères "​S"​ ou "​s"​ à la ligne du curseur et surligne toutes les occurrences potentiellement substituables.
-> **''​nohlsearch''​** pour retirer la surbrillance. +> **''​:nohlsearch''​** pour retirer la surbrillance. 
->puis pour annuler la substitution "​Échap",​ puis appuyer sur la lettre "​u"​ ("​u"​ pour annuler un seul changement, "​U"​ pour annuler plusieurs ​changement sur une ligne.+>puis pour annuler la substitution "​Échap" ​(pour être sûr de ne pas être en mode insertion), puis appuyer sur la lettre "​u"​ ("​u"​ pour annuler un seul changement, ​("​U"​ pour annuler plusieurs ​changements). 
 + 
 +  * __idem sur tout le texte :__
  
-  * idem sur tout le texte : 
 <​code>​ <​code>​
 :​1,​$s/​[Ss]/​XXX/​g :​1,​$s/​[Ss]/​XXX/​g
Ligne 991: Ligne 1013:
 >"​1,​$"​ est l'​adressage qui signifie de la première ligne à la fin. >"​1,​$"​ est l'​adressage qui signifie de la première ligne à la fin.
  
-  * sous-chaîne avec parenthèses et accolades :+  * __Sous-chaîne avec parenthèses et accolades :__ 
 <​code>​ <​code>​
-/​\([0-9]\{3\}.\)\{2\} +/​\([0-9]\{3\}.\)\{2\}\.</​code>​ 
-</​code>​ + 
-Vi ou vim surligne à la ligne 9 (comportant "​123.3456.abc"​) la sous-chaîne **''​123.3456.''​**.+>Vi ou vim surligne à la ligne 9 (comportant "​123.3456.abc"​) la sous-chaîne **''​123.3456.''​**.
  
  
Ligne 1300: Ligne 1323:
 ===Exemples === ===Exemples ===
  
-  * Substituer ​"​Hello"​ par "​OK"​ :+  * __Substituer ​"​Hello"​ par "​OK"​ :__
  
 <code user>​echo "​coucou Hello Yep" | sed -r '​s/​[A-Z]{1}[a-z]{4}/​OK/​g'</​code>​ <code user>​echo "​coucou Hello Yep" | sed -r '​s/​[A-Z]{1}[a-z]{4}/​OK/​g'</​code>​
Ligne 1307: Ligne 1330:
 </​code>​ </​code>​
  
-  * Substituer ​"​a"​ et "​aa"​ par "​OK"​ :+  * __Substituer ​"​a"​ et "​aa"​ par "​OK"​ :__
  
 <code user>​echo "a aa aaa aaaa aaaaaa aaaaaaaa"​ | sed -re '​s/​(a{1} )/​OK/'​\ <code user>​echo "a aa aaa aaaa aaaaaa aaaaaaaa"​ | sed -re '​s/​(a{1} )/​OK/'​\
Ligne 1330: Ligne 1353:
 __**Préparation**__\\ ​ __**Préparation**__\\ ​
  
-Dans le répertoire de l'​utilisateur soit le répertoire "​ERetCMD/" ​contenant ​:+Rappel : le répertoire "​ERetCMD/" ​contient ​:
  
 <​code>​ <​code>​
-Dossier  ​     img-perso-2.jpg  ​liste3-erb-ere     sort1.txt +Dossier  ​     img-perso-2.jpg  ​liste2-nom      server-0.xkb 
-essai.grep2~  ​     ​liste  ​      liste4-spec     sort2.txt +image linux - 01.jpg  ​liste  ​      liste3-erb-ere ​ smolski-exo-sed.txt 
-image linux - 01.jpg  liste1  ​      ​liste4-vim     ​sort3.txt +image linux - 02.jpg  liste1  ​      ​liste4-spec     ​sort1.txt 
-image linux - 02.jpg  liste1-nom ​      liste-class  ​   vim2.png +image linux - 03.jpg  liste1-nom ​      liste4-vim      sort2.txt 
-image linux - 03.jpg ​ liste2  ​      ​server-0.xkb  ​   ​vim.png +img-perso-1.jpg ​      ​liste2        liste-class     sort3.txt
-img-perso-1.jpg ​      ​liste2-nom       ​smolski-exo-sed.txt ​ xxx-sort.txt+
 </​code>​ </​code>​
  
 ===Exemples === ===Exemples ===
-  * accolades ​(depuis le répertoire parent "​ERetCMD/"​ des fichiers recherchés :+  * __Les accolades__ ​(depuis le répertoire parent "​ERetCMD/"​ des fichiers recherchés :
 <code user>​find -regextype "​posix-basic"​ -regex "​.*/​[a-z]\{,​3\}-.*\.jpg$"</​code>​ <code user>​find -regextype "​posix-basic"​ -regex "​.*/​[a-z]\{,​3\}-.*\.jpg$"</​code>​
 <​code>​ <​code>​
Ligne 1357: Ligne 1379:
 </​code>​ </​code>​
  
-  * caractère ? :+  * __Le caractère ? :__ 
 <code user>​find -regextype "​posix-basic"​ -regex "​.*/​liste.\?"</​code>​ <code user>​find -regextype "​posix-basic"​ -regex "​.*/​liste.\?"</​code>​
 <​code>​ <​code>​
Ligne 1365: Ligne 1388:
 </​code>​ </​code>​
  
-  * le caractère + (depuis le répertoire parent "​ERetCMD/"​ des fichiers) : +  * __Le caractère +__ (depuis le répertoire parent "​ERetCMD/"​ des fichiers) : 
 <code user>​find -regextype "​posix-extended"​ -regex "​.*liste.+"</​code>​ <code user>​find -regextype "​posix-extended"​ -regex "​.*liste.+"</​code>​
 <​code>​ <​code>​
Ligne 1384: Ligne 1407:
 De même que précédemment,​ on peut choisir l'​option **''​--regexp''​** pour utiliser les caractères spécifiques aux ERb qui nécessitent **''​\''​**. De même que précédemment,​ on peut choisir l'​option **''​--regexp''​** pour utiliser les caractères spécifiques aux ERb qui nécessitent **''​\''​**.
  
-Soit encore le répertoire "​ERetCMD/"​ contenant les mêmes fichiers ​(voir find).\\ +Soit encore le répertoire "​ERetCMD/"​ contenant les mêmes fichiers.\\ ​
  
 Mise à jour de la base de donnée, si besoin : Mise à jour de la base de donnée, si besoin :
Ligne 1392: Ligne 1415:
  
 ===Exemples === ===Exemples ===
-  * parenthèses ​et accolades ​(depuis n'​importe où dans l'​arborescence du système de fichiers) :+  * __Parenthèses ​et accolades__ ​(depuis n'​importe où dans l'​arborescence du système de fichiers) :
  
 <code user>​locate --regexp '​\([a-z]\{1,​\} \)\{2\}.*\.jpg$'</​code>​ <code user>​locate --regexp '​\([a-z]\{1,​\} \)\{2\}.*\.jpg$'</​code>​
Ligne 1401: Ligne 1424:
 /​home/​hypathie/​ERetCMD/​image linux - 03.jpg /​home/​hypathie/​ERetCMD/​image linux - 03.jpg
 </​code>​ </​code>​
 +
 +> D'​autres fichiers que ceux du répertoire "​~/​ERetCMD/"​ et créés pour les exemples peuvent apparaître.
  
 ou ou
Ligne 1412: Ligne 1437:
 </​code>​ </​code>​
  
-  * caractère ​? :+  * __Caractère ​? :__ 
 <code user>​locate --regex '/​liste.?'</​code>​ <code user>​locate --regex '/​liste.?'</​code>​
 <​code>​ <​code>​
Ligne 1431: Ligne 1457:
 >Le fichier "​liste"​ (sans extension) apparaît. >Le fichier "​liste"​ (sans extension) apparaît.
  
-  * caractère ​+ :+  * __Caractère ​+ :__
  
 <code user>​locate --regex '/​liste.+'</​code>​ <code user>​locate --regex '/​liste.+'</​code>​
Ligne 1449: Ligne 1475:
  
  
->Le fichier "​liste"​ (sans extension) n'​apparaît ​pas.+>Le fichier "​liste"​ (sans extension) n'​apparaît ​plus.
  
 =====Les classes ===== =====Les classes =====
Ligne 1473: Ligne 1499:
 ====grep, grep -E et les classes==== ====grep, grep -E et les classes====
 La commande grep utilise les classes soit comme ERb et soit comme ERe, c'​est-à-dire sans l'​option -E ou avec l'​option -E  La commande grep utilise les classes soit comme ERb et soit comme ERe, c'​est-à-dire sans l'​option -E ou avec l'​option -E 
 +
 ===Préparation === ===Préparation ===
   * soit le fichier "   * soit le fichier "
-<code user>cat liste-class<​/code> +<code user>cd ~/ERetCMD/ && ​cat >> ​liste-class <<EOF
-<code> ​+
 gdd:​a:​aa:​aaa:​aaaa:​aaaaaa:​aaaaaaaa gdd:​a:​aa:​aaa:​aaaa:​aaaaaa:​aaaaaaaa
 T5c Kc5 T5 c E2* abcd 7 9Abcd T5c Kc5 T5 c E2* abcd 7 9Abcd
Ligne 1487: Ligne 1513:
 -15 +36 5687 {15} exemple{36} -15 +36 5687 {15} exemple{36}
 123.3456.abc 123.3456.abc
 +EOF
 </​code>​ </​code>​
  
Ligne 1501: Ligne 1528:
 </​code>​ </​code>​
  
->sélection ​de "​3456"​ ; "​5687"​ ; de "​2356"​ ; et des lignes avec plus de 4 chiffres consécutif.+>Sélection ​de "​3456"​ ; "​5687"​ ; de "​2356"​ ; et des lignes avec plus de 4 chiffres consécutif.
  
 <code user>​grep "​[[:​digit:​]]\{6\}"​ liste-class</​code>​ <code user>​grep "​[[:​digit:​]]\{6\}"​ liste-class</​code>​
Ligne 1545: Ligne 1572:
  
 ====locate et les classes, ERb ou ERe==== ====locate et les classes, ERb ou ERe====
-  * Visualisation ​du répertoire ​~/ERetCMD/ :+  * Rappel ​du contenu de "~/ERetCMD/" ​:
 <code user>​ls</​code>​ <code user>​ls</​code>​
 <​code>​ <​code>​
-Dossier  ​     img-perso-1.jpg  liste3-erb-ere ​ smolski-exo-sed.txt +Dossier  ​     img-perso-2.jpg  ​liste2-nom ​     server-0.xkb 
-essai.grep2~  ​     img-perso-2.jpg ​ liste4-spec ​    ​sort1.txt +image linux - 01.jpg ​ liste  ​      liste3-erb-ere ​ smolski-exo-sed.txt 
-image linux - 01.jpg  liste1-nom ​      ​liste4-spec~    ​sort2.txt +image linux - 02.jpg  ​liste1  ​      liste4-spec ​    ​sort1.txt 
-image linux 02.jpg ​ liste1-nom~      liste4-vim ​     sort3.txt +image linux - 03.jpg  liste1-nom ​      ​liste4-vim      ​sort2.txt 
-image linux - 03.jpg  liste2-nom       ​server-0.xkb ​   xxx-sort.txt+img-perso-1.jpg       ​liste2        liste-class     sort3.txt
 </​code>​ </​code>​
  
-===sous-chaîne avec classes dans une ERb===+===Sous-chaîne avec classes dans une ERb===
  
 >Option --regexp et on met un antislash de toutes les parenthèses et les accolades. >Option --regexp et on met un antislash de toutes les parenthèses et les accolades.
Ligne 1566: Ligne 1593:
 </​code>​ </​code>​
  
-===sous-chaîne avec classes dans une ERe===+>​D'​autres fichiers créés avant l'​exercice peuvent apparaître. 
 + 
 +===Sous-chaîne avec classes dans une ERe===
  
 >Idem mais avec option --regex et on enlève les ''​\''​ inutiles avec les ERe >Idem mais avec option --regex et on enlève les ''​\''​ inutiles avec les ERe
Ligne 1645: Ligne 1674:
 </​code>​ </​code>​
  
-====la commande expr utilise les classes en tant ERb====+====La commande expr utilise les classes en tant ERb====
  
   * Exemple 1 :   * Exemple 1 :
Ligne 1666: Ligne 1695:
 ====vi (vim) utilise les classes en tant que ERb==== ====vi (vim) utilise les classes en tant que ERb====
 ===Préparation === ===Préparation ===
-<code user>vim liste4-vim</​code>​ +<code user>vim liste4-spec</​code>​ 
-<​code>​ + 
-Kc5 T5 c E2* abcd 7 9Abcd +{{http://​pix.toile-libre.org/​upload/​original/​1408097498.png?400}} 
-7 1AAA.AAA.bcdef aBcd6a 123* +
-abc2356.99 +
-73000|Savoie +
-index-tel|04|Rhône-Alpe +
--15 +36 5687 {15exemple{36+
-il y a un truc et un truc et encore un truc et une chose +
-chose et truc ne font pas bon ménage +
-123.3456.abc +
-trucchosetruc +
-tructructruc +
-chosechosechose +
-</​code>​+
 ===Exemples === ===Exemples ===
  
Ligne 1687: Ligne 1705:
 <​code>/​[[:​alnum:​]]\{7\}{[[:​digit:​]]\{2\}} </​code>​ <​code>/​[[:​alnum:​]]\{7\}{[[:​digit:​]]\{2\}} </​code>​
  
--> sélectionne entièrement la chaîne **''​exemple{36}''​**+{{http://​pix.toile-libre.org/​upload/​original/​1408097922.png?​400}}
  
   * Substitution <​nowiki>​[[:​graph:​]]</​nowiki>:​   * Substitution <​nowiki>​[[:​graph:​]]</​nowiki>:​
 <​code>:​6,​10s/​[[:​graph:​]]/​x/​g</​code>​ <​code>:​6,​10s/​[[:​graph:​]]/​x/​g</​code>​
  
-Le caractère "​ô"​ n'​est ​pas concerné du fait de la touche morte.+{{http://​pix.toile-libre.org/​upload/​original/​1408098079.png?​400}} 
 + 
 +Les caractères accentués ne sont pas concernés car ils comportent un caractère ​de contrôle pour l'​accentuation avec la touche morte
 + 
 +> Faire **'':​nohlsearch''​** et **''​u''​** pour la suite.
  
-{{http://​pix.toile-libre.org/​upload/​original/​1407925315.png?​400}} 
  
   * Substitution <​nowiki>​[[:​print:​]]</​nowiki>​ :   * Substitution <​nowiki>​[[:​print:​]]</​nowiki>​ :
 <​code>:​6,​10s/​[[:​print:​]]/​x/​g</​code>​ <​code>:​6,​10s/​[[:​print:​]]/​x/​g</​code>​
  
-{{http://​pix.toile-libre.org/​upload/​original/​1407925697.png?400}}+{{http://​pix.toile-libre.org/​upload/​original/​1408098434.png?400}} 
 + 
 +> Cette fois les caractères accentués sont concernés s'ils font partie de l'​adressage. 
 +> Faire **'':​q!''​** pour quitter sans enregistrer.
  
 =====awk les ERe et les classes===== =====awk les ERe et les classes=====
-<code user>cat liste2-nom<​/code> +<code user>cd ~/ERetCMD && ​cat >> ​liste2-nom <<EOF
-<code> ​+
 Constance 20-03-1998 Constance 20-03-1998
 Rebecca 09-03-1999 Rebecca 09-03-1999
Ligne 1710: Ligne 1733:
 Hélène-Fleur 06-03-2005 Hélène-Fleur 06-03-2005
 Samuel 27-08-2008 Samuel 27-08-2008
 +EOF
 </​code>​ </​code>​
  
utilisateurs/hypathie/tutos/erb-et-ere-par-le-contexte-des-commandes.txt · Dernière modification: 01/10/2023 11:39 (modification externe)

Pied de page des forums

Propulsé par FluxBB