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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [14/08/2014 11:42] Hypathie [Caractères spécifiques aux ERb ou caractères spécifiques aux ERe] |
utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes [15/08/2014 10:01] Hypathie [Introduction] |
||
---|---|---|---|
Ligne 64: | Ligne 64: | ||
|**''[ ]''** |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\\ | | ||
+ | |||
+ | ===Préparation=== | ||
+ | |||
+ | * Exécuter cette ligne de commande : | ||
+ | <code user> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | milou tintin titi1 titi2 toto Toto.txt | ||
+ | tata titi titi1.txt tito Toto1.txt | ||
+ | </code> | ||
+ | |||
+ | <note> | ||
+ | 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: | ||
+ | <code user> | ||
+ | cd ~ && rm -vfR ERetCMD/ | ||
+ | </code> | ||
+ | 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. | ||
+ | </note> | ||
===Métacaractère ou caractère d'expression rationnelle ?=== | ===Métacaractère ou caractère d'expression rationnelle ?=== | ||
* L'étoile : | * L'étoile : | ||
- | Imaginons qu'on cherche __tous les fichiers__ contenant le caractère "e".\\ | + | Imaginons qu'on cherche __tous les fichiers commençant par "t"__ contenant le caractère "e".\\ |
- | <code user>grep -lR "e" Toto*</code> | + | <code user>grep -lR "e" t*</code> |
+ | <code> | ||
+ | tintin | ||
+ | titi1 | ||
+ | titi2 | ||
+ | tito | ||
+ | toto | ||
+ | </code> | ||
> option -l : Ne pas afficher les résultats normaux. À la place, indiquer le nom des fichiers pour lesquels des résultats auraient été affichés. | > option -l : Ne pas afficher les résultats normaux. À la place, indiquer le nom des fichiers pour lesquels des résultats auraient été affichés. | ||
Ligne 80: | Ligne 118: | ||
<code>grep -E "[ae]n.?" titi?</code> | <code>grep -E "[ae]n.?" titi?</code> | ||
<code> | <code> | ||
- | titi.:dans | + | titi1:documentation |
- | titi1:en | + | |
titi2:dent | titi2:dent | ||
</code> | </code> | ||
Ligne 97: | Ligne 134: | ||
<code user>grep "[Tt][io]t[io]" [Tt][io]t[io]?</code> | <code user>grep "[Tt][io]t[io]" [Tt][io]t[io]?</code> | ||
<code> | <code> | ||
- | titi.:Toto Titi toto titi tito | + | grep "[Tt][io]t[io]" [Tt][io]t[io]? |
- | titi1:Toto titi toto tito | + | |
- | titi2:Toto Titi | + | |
- | toto.:Toto titi toto tito | + | |
</code> | </code> | ||
Ligne 111: | Ligne 145: | ||
<code> | <code> | ||
titi1.txt:. | titi1.txt:. | ||
- | Toto1.txt:. | + | Toto1.txt:il a tout mangé. |
</code> | </code> | ||
Ligne 121: | Ligne 155: | ||
=== find=== | === find=== | ||
+ | //Depuis le répertoire personnel ou le répertoire "~ERetCMD" ou même le répertoire "~/ERetCMD/Dossier/"// | ||
+ | |||
+ | *Étoile : | ||
+ | |||
<code user>find ~/ERetCMD/Dossier/ -name "toto*"</code> | <code user>find ~/ERetCMD/Dossier/ -name "toto*"</code> | ||
<code> | <code> | ||
/home/hypathie/ERetCMD/Dossier/toto | /home/hypathie/ERetCMD/Dossier/toto | ||
- | /home/hypathie/ERetCMD/Dossier/toto. | ||
</code> | </code> | ||
+ | |||
+ | * Le point d'interrogation : | ||
<code user>find ~/ERetCMD/Dossier/ -name "titi?"</code> | <code user>find ~/ERetCMD/Dossier/ -name "titi?"</code> | ||
<code> | <code> | ||
/home/hypathie/ERetCMD/Dossier/titi1 | /home/hypathie/ERetCMD/Dossier/titi1 | ||
- | /home/hypathie/ERetCMD/Dossier/titi. | + | /home/hypathie/ERetCMD/Dossier/titi2 |
</code> | </code> | ||
+ | |||
+ | * Crochets : | ||
<code user>find ~/ERetCMD/Dossier/ -name "[Tt][io]t[io]?"</code> | <code user>find ~/ERetCMD/Dossier/ -name "[Tt][io]t[io]?"</code> | ||
<code> | <code> | ||
/home/hypathie/ERetCMD/Dossier/titi1 | /home/hypathie/ERetCMD/Dossier/titi1 | ||
- | /home/hypathie/ERetCMD/Dossier/toto. | + | /home/hypathie/ERetCMD/Dossier/titi2 |
- | /home/hypathie/ERetCMD/Dossier/titi. | + | |
</code> | </code> | ||
===locate === | ===locate === | ||
+ | |||
+ | * Préparation : | ||
+ | |||
+ | Se déplacer dans le répertoire "~/ERetCMD/" ; y créer les fichiers suivants en faisant : | ||
+ | <code user> | ||
+ | cd ~/ERetCMD/ && touch liste liste1 liste1-nom liste2\ | ||
+ | liste2-nom liste3-erb-ere liste4-spec\ | ||
+ | liste4-vim liste-class server-0.xkb smolski-exo-sed.txt\ | ||
+ | sort1.txt sort2.txt sort3.txt\ | ||
+ | image\ linux\ -\ 01.jpg image\ linux\ -\ 02.jpg\ | ||
+ | image\ linux\ -\ 03.jpg img-perso-1.jpg img-perso-2.jpg | ||
+ | ls | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | Dossier img-perso-2.jpg liste2-nom server-0.xkb | ||
+ | image linux - 01.jpg liste liste3-erb-ere smolski-exo-sed.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> | ||
+ | |||
<note tip> | <note tip> | ||
Pour utiliser locate, qui fonctionne à partir de la base de donnée, faire un petit : | Pour utiliser locate, qui fonctionne à partir de la base de donnée, faire un petit : | ||
- | <code root> # updatedb</code> | + | <code root>updatedb</code> |
pour effectuer les mises à jour, avant de lancer la recherche. | pour effectuer les mises à jour, avant de lancer la recherche. | ||
</note> | </note> | ||
- | |||
- | *Soit le répertoire "~/ERetCMD/" | ||
- | <code>ls ~/ERetCMD/</code> | ||
- | <code> | ||
- | Dossier liste1-nom~ server-0.xkb sort2.txt | ||
- | essai.grep2~ liste2-nom smolski-exo-sed.txt sort3.txt | ||
- | liste1-nom liste3-erb-ere sort1.txt xxx-sort.txt | ||
- | </code> | ||
* Rechercher les fichiers dont le nom est "un ou plusieurs caractères suivi de ".txt" : | * Rechercher les fichiers dont le nom est "un ou plusieurs caractères suivi de ".txt" : | ||
Ligne 164: | Ligne 218: | ||
/home/hypathie/ERetCMD/sort2.txt | /home/hypathie/ERetCMD/sort2.txt | ||
/home/hypathie/ERetCMD/sort3.txt | /home/hypathie/ERetCMD/sort3.txt | ||
- | /home/hypathie/ERetCMD/xxx-sort.txt | + | |
+ | </code> | ||
+ | |||
+ | ===sed=== | ||
+ | |||
+ | * Prépararation : | ||
+ | Vérifier qu'on est bien au niveau du "~/ERetCMD/Dossier/" | ||
+ | |||
+ | <code user>sed -r '/(a|e).*/s/a/A/' ti*</code> | ||
+ | |||
+ | > L'expression rationnelle est constituée de l'alternative ''(a|e)'' (la sous-chaîne "a" ou "e"), suivi d'un caractère quelconque zéro ou plusieurs fois. | ||
+ | >Cela sera approfondit dans la partie [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#caracteres-specifiques-aux-erb-ou-caracteres-specifiques-aux-ere|Caractères spécifiques aux ERb ou caractères spécifiques aux ERe]] | ||
+ | |||
+ | <code> | ||
+ | un copAin malin | ||
+ | modifiAnt cette page | ||
+ | Toto Titi toto titi tito | ||
+ | dAns | ||
+ | documentAtion | ||
+ | . | ||
+ | Toto Titi | ||
+ | dent | ||
+ | Il mAnque une option a tito | ||
+ | </code> | ||
+ | |||
+ | ===awk === | ||
+ | |||
+ | *Préparation : | ||
+ | Dans le dossier "~/ERetCMD/Dossier" créer les fichiers "smolski-awk.txt" et "smolski-sed.txt": | ||
+ | <code user> | ||
+ | touch smolski-sed.txt && cat >> smolski-sed.txt <<EOF | ||
+ | toto et titi aiment les abricots. | ||
+ | toto préfère les Fraises. | ||
+ | titi les cerises. | ||
+ | TOTo et TITI sont des chipoteurs du jardin. | ||
+ | EOF | ||
+ | </code> | ||
+ | |||
+ | <code user>touch smolski-awk.txt && cat >> smolski-awk.txt <<EOF | ||
+ | 1 3 Nom Genre Age | ||
+ | 2 1 --------------------------------------- | ||
+ | 3 3 CAMILLE M 7 | ||
+ | 4 3 CHLOE F 12 | ||
+ | 5 3 CLARA F 11 | ||
+ | 6 3 CLEMENT M 7 | ||
+ | 7 3 EMMA F 6 | ||
+ | 8 3 THEO M 8 | ||
+ | EOF | ||
+ | </code> | ||
+ | |||
+ | * Utilisation d'une ER et de métacaractère avec awk : | ||
+ | <code user>awk '$3 ~ /(e|E)/' smolski-*</code> | ||
+ | |||
+ | >Affiche les lignes dont la troisième colonne comporte un "e" ou un "E" de TOUS les fichiers du répertoire "~/ERetCMD/Dossier" commençant par "smolski-". | ||
+ | >Le caractère ''~'' (tilde) est un opérateur de correspondance relevant de la commande awk. | ||
+ | >Il permet de tester la correspondance entre la variable ''$3'' et l'expression rationnelle encadrée de ''/'' (''/(e|E)/''). Voir [[utilisateurs:hypathie:tutos:erb-et-ere-par-le-contexte-des-commandes#awk-et-les-caracteres-communs-aux-erb-et-ere|awk et les expressions rationnelles]] | ||
+ | |||
+ | <code> | ||
+ | 3 3 CAMILLE M 7 | ||
+ | 4 3 CHLOE F 12 | ||
+ | 6 3 CLEMENT M 7 | ||
+ | 7 3 EMMA F 6 | ||
+ | 8 3 THEO M 8 | ||
+ | toto préfère les Fraises. | ||
+ | titi les cerises. | ||
</code> | </code> | ||
<note tip> | <note tip> | ||
- | *__sed et awk__\\ Ces commandes étant faites pour travailler le contenu des fichiers, et non pour la recherche de fichiers, elles n'utilisent pas les métacaractères du shell. | + | Pour vi (vim), il faut avoir ouvert le fichier pour utiliser les expressions rationnelles, |
+ | mais on peut utiliser les métacaractères pour ouvrir plusieurs fichiers en même temps.\\ | ||
+ | |||
+ | Par exemple en étant au niveau du fichier "~/ERetCMD/Dossier" : | ||
+ | |||
+ | <code user>vim smolski-*</code> | ||
+ | |||
+ | Les fichiers "smolski-awk.txt" et "smolski-sed.txt" seront ouverts.\\ | ||
+ | Et pour passer de l'un à l'autre : on tape au clavier '':next'', pour passer au second, si on se trouve devant le 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. | ||
</note> | </note> | ||
- | **Puisque tout est bien clair, nous pouvons aller plus loin, et présenter comment utiliser les programmes GNU/Linux permettant d'utiliser les expressions rationnelles. Cela permettra aussi, non seulement de distinguer ERb, ERe et classes, mais encore d'en apprécier les différents types.** 8-) | + | **Puisque tout est bien clair, nous pouvons aller plus loin, et présenter le détail des expressions rationnelles ainsi que leur utilisation avec les programmes GNU/Linux. Cela permettra, non seulement de distinguer ERb, ERe et classes, mais encore d'en apprécier les différences.** 8-) |
=====Les expressions rationnelles basiques et les commandes GNU/Linux===== | =====Les expressions rationnelles basiques et les commandes GNU/Linux===== | ||
Ligne 214: | Ligne 342: | ||
</note> | </note> | ||
- | * Soit le fichier "liste1-nom" : | + | ===Préparation === |
- | <code> | + | * Dans le répertoire "~/ERetCMD/" inscrire le contenu suivant dans le fichier "liste1-nom" : |
+ | <code>cd ~/ERetCMD/ && cat >> liste1-nom << EOF | ||
1 2 Francine | 1 2 Francine | ||
2 3 Édith | 2 3 Édith | ||
Ligne 228: | Ligne 357: | ||
6 8 Amanda | 6 8 Amanda | ||
+ | EOF | ||
</code> | </code> | ||
>La dernière ligne du fichier est vide. | >La dernière ligne du fichier est vide. | ||
- | ===le caractère début de ligne ^ === | + | ===Le caractère début de ligne ^ === |
<code user>grep "^4" liste1-nom</code> | <code user>grep "^4" liste1-nom</code> | ||
4 5 Béatrice | 4 5 Béatrice | ||
- | *le caractère fin de ligne $ | + | ===Le caractère fin de ligne $ === |
<code user>grep "e$" liste1-nom</code> | <code user>grep "e$" liste1-nom</code> | ||
Ligne 251: | Ligne 380: | ||
<code user>grep "^$" liste1-nom</code> | <code user>grep "^$" liste1-nom</code> | ||
- | ===le point=== | + | ===Le point=== |
<code user>grep ".dith" liste1-nom</code> | <code user>grep ".dith" liste1-nom</code> | ||
2 3 Édith | 2 3 Édith | ||
- | ===l'étoile=== | + | ===L'étoile=== |
<code user>grep "A*" liste1-nom</code> | <code user>grep "A*" liste1-nom</code> | ||
<code> | <code> | ||
Ligne 274: | Ligne 403: | ||
</code> | </code> | ||
- | > Attention, 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 aussi, y compris la ligne vide. | + | > Attention, 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 aussi, y compris la ligne vide. |
<code user>grep "123 A*" liste1-nom</code> | <code user>grep "123 A*" liste1-nom</code> | ||
Ligne 280: | Ligne 409: | ||
123 AAAAAA | 123 AAAAAA | ||
- | ===les crochets=== | + | ===Les crochets=== |
<code user>grep "[43]" liste1-nom</code> | <code user>grep "[43]" liste1-nom</code> | ||
Ligne 290: | Ligne 419: | ||
>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 [^ ]=== |
>Chaîne qui commence ni par 1, ni par 2, ni par aucun des caractères entre crochets. | >Chaîne qui commence ni par 1, ni par 2, ni par aucun des caractères entre crochets. | ||
Ligne 300: | Ligne 429: | ||
toutefois | toutefois | ||
- | *Chaîne qui ne se termine pas par le caractère "e". | + | *Chaîne qui ne se termine pas l'un des caractères de l'intervalle. |
- | <code user>grep "[^e]$" liste1-nom</code> | + | |
- | + | ||
- | 2 3 Édith | + | |
- | 123 AAAAAA | + | |
- | partout | + | |
- | toutefois | + | |
- | 6 8 Amanda | + | |
- | + | ||
- | *Chaîne qui ne se termine pas 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 341: | Ligne 461: | ||
<note tip> | <note tip> | ||
- | Avec find il faut toujours une option pour utiliser une //ER//.\\ | + | Avec find, il faut toujours une option pour utiliser une //ER//.\\ |
* Pour une expression rationnelle basique :\\ | * Pour une expression rationnelle basique :\\ |