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 18:41] Hypathie [Introduction] |
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 119: | Ligne 153: | ||
Il s'agit de **find** et **locate**. | Il s'agit de **find** et **locate**. | ||
- | |||
- | ===Péparation=== | ||
- | * créer le répertoire "~/ERetCMD/" et ~/ERetCMD/Dossier: | ||
- | <code user>mkdir ERetCMD/ && cd ERetCMD/ && mkdir Dossier/</code> | ||
- | |||
- | * Créer les fichiers suivants : | ||
- | <code user>cd Dossier/ && touch milou test titi\ | ||
- | titi1 titi2 tito toto. Toto.txt tata tintin titi.\ | ||
- | titi.txt titi1.txt toto Toto1.txt | ||
- | </code> | ||
- | |||
- | * Pour supprimer le répertoire et tout son contenu : | ||
- | (néanmoins, ils serviront pour l'ensemble du wiki) | ||
- | <code>rm -vfR ERetcmd/</code> | ||
=== find=== | === find=== | ||
Ligne 142: | Ligne 162: | ||
<code> | <code> | ||
/home/hypathie/ERetCMD/Dossier/toto | /home/hypathie/ERetCMD/Dossier/toto | ||
- | /home/hypathie/ERetCMD/Dossier/toto. | ||
</code> | </code> | ||
Ligne 151: | Ligne 170: | ||
/home/hypathie/ERetCMD/Dossier/titi1 | /home/hypathie/ERetCMD/Dossier/titi1 | ||
/home/hypathie/ERetCMD/Dossier/titi2 | /home/hypathie/ERetCMD/Dossier/titi2 | ||
- | /home/hypathie/ERetCMD/Dossier/titi. | ||
</code> | </code> | ||
Ligne 160: | Ligne 178: | ||
/home/hypathie/ERetCMD/Dossier/titi1 | /home/hypathie/ERetCMD/Dossier/titi1 | ||
/home/hypathie/ERetCMD/Dossier/titi2 | /home/hypathie/ERetCMD/Dossier/titi2 | ||
- | /home/hypathie/ERetCMD/Dossier/toto. | ||
- | /home/hypathie/ERetCMD/Dossier/titi. | ||
</code> | </code> | ||
Ligne 168: | Ligne 184: | ||
* Préparation : | * Préparation : | ||
- | Soit le même répertoire "~/ERetCMD/" ; y créer les fichiers suivants : | + | Se déplacer dans le répertoire "~/ERetCMD/" ; y créer les fichiers suivants en faisant : |
<code user> | <code user> | ||
- | touch liste liste1 liste1-nom liste2\ | + | cd ~/ERetCMD/ && touch liste liste1 liste1-nom liste2\ |
liste2-nom liste3-erb-ere liste4-spec\ | liste2-nom liste3-erb-ere liste4-spec\ | ||
liste4-vim liste-class server-0.xkb smolski-exo-sed.txt\ | liste4-vim liste-class server-0.xkb smolski-exo-sed.txt\ | ||
Ligne 176: | Ligne 192: | ||
image\ linux\ -\ 01.jpg image\ linux\ -\ 02.jpg\ | image\ linux\ -\ 01.jpg image\ linux\ -\ 02.jpg\ | ||
image\ linux\ -\ 03.jpg img-perso-1.jpg img-perso-2.jpg | image\ linux\ -\ 03.jpg img-perso-1.jpg img-perso-2.jpg | ||
+ | ls | ||
</code> | </code> | ||
- | |||
- | <code>ls ~/ERetCMD/</code> | ||
- | |||
<code> | <code> | ||
Ligne 191: | Ligne 205: | ||
<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> | ||
Ligne 210: | Ligne 224: | ||
* Prépararation : | * Prépararation : | ||
- | Se déplacer au niveau du "~/ERetCMD/Dossier" | + | Vérifier qu'on est bien au niveau du "~/ERetCMD/Dossier/" |
<code user>sed -r '/(a|e).*/s/a/A/' ti*</code> | <code user>sed -r '/(a|e).*/s/a/A/' ti*</code> | ||
Ligne 219: | Ligne 233: | ||
<code> | <code> | ||
un copAin malin | un copAin malin | ||
- | documentAtion | ||
modifiAnt cette page | modifiAnt cette page | ||
- | frAise | ||
- | suivAnte | ||
Toto Titi toto titi tito | Toto Titi toto titi tito | ||
dAns | dAns | ||
- | frAise fraise | + | documentAtion |
- | en | + | |
- | Toto titi toto tito | + | |
. | . | ||
Toto Titi | Toto Titi | ||
dent | dent | ||
- | titi Aime les fraises | ||
Il mAnque une option a tito | Il mAnque une option a tito | ||
</code> | </code> | ||
Ligne 240: | Ligne 248: | ||
Dans le dossier "~/ERetCMD/Dossier" créer les fichiers "smolski-awk.txt" et "smolski-sed.txt": | Dans le dossier "~/ERetCMD/Dossier" créer les fichiers "smolski-awk.txt" et "smolski-sed.txt": | ||
<code user> | <code user> | ||
- | touch smolski-awk.txt && cat >> smolski-sed.txt <<EOF | + | touch smolski-sed.txt && cat >> smolski-sed.txt <<EOF |
toto et titi aiment les abricots. | toto et titi aiment les abricots. | ||
toto préfère les Fraises. | toto préfère les Fraises. | ||
Ligne 248: | Ligne 256: | ||
</code> | </code> | ||
- | <code user>touch smolski-sed.txt && cat >> smolski-awk.txt <<EOF | + | <code user>touch smolski-awk.txt && cat >> smolski-awk.txt <<EOF |
1 3 Nom Genre Age | 1 3 Nom Genre Age | ||
2 1 --------------------------------------- | 2 1 --------------------------------------- | ||
Ligne 265: | Ligne 273: | ||
>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-". | >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. | >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 [[doc:programmation:awk|awk]] et [[http://wiki.debian-facile.org/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]] | + | >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> | <code> | ||
Ligne 292: | Ligne 300: | ||
</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 334: | 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 348: | 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 371: | 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 394: | 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 400: | 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 410: | 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 420: | 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 461: | 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 :\\ |