31
Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe Roberge - Mai 2014

Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Embed Size (px)

Citation preview

Page 1: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Systèmes d’exploitation et programmation de systèmes

-GPA435-

Cours #8: Introduction aux filtres - Filtres UNIX

Enseignant: Jean-Philippe Roberge

Jean-Philippe Roberge - Mai 2014

Page 2: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Planification du cours #8

Retour rapide sur l’examen intra Petite révision du chapitre #7:

Décodage des paramètres Évaluation répétitive Commande expr

Théorie du cours #8: Introduction aux filtres programmables UNIX / LINUX

Filtres comm(1), diff(1) et cmp(1) Filtre uniq(1) Filtre tr(1) Filtre cut(1) Filtre egrep(1)

2Jean-Philippe Roberge - Mai 2014

Page 3: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

3

1. Neutralisation des caractères (dernière fois)

2. Déverminage (brève revue)

3. Décodage des paramètres: getopts

4. La commande eval

5. La commande expr

Revue des dernières notions du chapitre #7 (1)

Page 4: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Cours #8Cours #8

Page 5: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

5

Les filtres UNIX sont des commandes (programmes écris en C) qui acceptent des données de l’entrée standard, effectuent des transformations sur ces données et les dirigent vers la sortie standard.

F iltre U N I X(com m ande)

Entréestandard

Sortiestandard

DonnéesDonnéestransform ées

Filtres UNIX (1)

Page 6: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

6

Pour les besoins de ce cours:

Un filtre transforme les données présentées à son entrée (et

provenant d’autres sources).

Un filtre achemine les données transformées à sa sortie standard

(et/ou vers d’autres destinations).

Un filtre affiche ses messages d’erreur vers la sortie erreur

standard.

Donc, ce ne sont pas toutes les commandes UNIX qui sont des

filtres (dans le sens défini ci-dessus).

Filtres UNIX (2)

Page 7: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

7

Filtres comm (1)

comm(1) compare le contenu de deux ensembles de données. L’un des deux ensemble peut provenir de l ’entrée standard.

Synopsis:

comm [options] fichier1 fichier2

1) Ne pas afficher la première colonne (les lignes présentent uniquement dans le fichier1)

2) Ne pas afficher la deuxième colonne (les lignes présentent uniquement dans le

fichier2)

3) Ne pas afficher dans la troisième colonne (les lignes présentent dans les deux fichiers)

Exemple…

Page 8: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

8

Je suis ici vous voircher Monsieur Jean.Comment ça va mon cher Watson ?Non, Pas le Dr. Watson de Windows!

F ich ier1

Je suis ici vous voircher Monsieur JeanComment ça va mon cher Watson ?Non, Pas le Dr. Watson de Holms!

F ich ier2

Filtres comm (2)

Note 1) si le nom de l’un des fichiers est le caractère - alors son contenu est lu de l ’entrée standard.

Statuts de sortie: 0 pour indiquer qu’il n’y a pas eu d’erreur; >0 pour indiquer qu’une erreur est rencontrée.

Exemple:

Page 9: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

9

Exemple (suite):

centi 15> comm comm1.dat comm2.dat Je suis ici vous voir cher Monsieur Jeancher Monsieur Jean. Comment ça va mon cher Watson ? Non, Pas le Dr. Watson de Holms!Non, Pas le Dr. Watson de Windows!centi 16>

Première colonne

Deuxième colonne

Troisième colonne

Filtres comm (3)

Page 10: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

10

Filtres diff (1)

diff(1) donne les différences entre deux ensembles de données (très utile dans plusieurs contextes!) .

Ce filtre accepte aussi les noms de répertoire.

Synopsis:

diff [options] fichier1 fichier2

diff [options] fichier1 répertoire

diff [options] répertoire fichier1

diff [options] répertoire1 répertoire2

Exemple:

Page 11: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

11

Filtres diff (2)

Synopsis (suite):

-b Ignorer les blancs (Espace et Tab) à la fin d’une ligne

-c[n] Afficher le contexte où les lignes différentes ont été trouvées

Statuts de sortie:

0 Pas de différence rencontrée

1 Des différences ont été relevées

>1 Une erreur est rencontrée

Page 12: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Interprétation des résultats de sortie: addition (a), élimination (d) et changement (c)

En effectuant ces opérations, les deux ensembles de données deviendront identiques.

12

Résultat Signification

L1 a L2,L3

> Lignes du fichier2

Ajouter lignes du fichier2 après ligne L1 du fichier1.

L1,L2 d L3

< Lignes du fichier1

Effacer les lignes L1 à L2 du fichier1.

L1,L2 c L3,L4

< Lignes du fichier1

---

> Lignes du fichier2

Changer les lignes L1 à L2 du fichier1 en L3 à L4 du fichier2.

Filtres diff (3)

Page 13: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

13

centi 17> diff comm1.dat comm2.dat2c2< cher Monsieur Jean.---> cher Monsieur Jean4c4< Non, Pas le Dr. Watson de Windows!---> Non, Pas le Dr. Watson de Holms!centi 18>

??

Filtres diff (4)

Qu’est-ce que ces résulats signifient ?

Page 14: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

14

Filtres uniq (1)

Fonctionnement du filtre: Montrer les lignes uniques d’un ensemble de données. Ce filtre accepte des données de l ’entrée standard ou d’un fichier.

Synopsis:

uniq [options] [-n] [+c] [fentree] [fsortie]

-c Afficher le nombre d’apparition de la ligne

-d Afficher uniquement les lignes répétées

-u Afficher les lignes qui ne sont pas répétées

-n Ignorer les n premiers champs des lignes

+cIgnorer les c premiers caractères des lignes

Page 15: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

15

Filtres uniq (2)

Synopsis (suite): fentree fichier d’entrée (rien=entrée std) fsortie fichier de sortie (rien=sortie std)

Statuts de sortie: 0 Pas d’erreur >0 erreur rencontrée

Note 1) Un champ est un ensemble de caractères entourés de caractères espaces ou Tab. Il peut exister 1 ou plusieurs champs dans une ligne.

Page 16: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

16

Filtres uniq (3) Exemple:

Michelle est de retourMinou à MoiMinou à MoiMinou à MoiMichelle est de retourMichelle est de retourMichelle est de retourMichelle est de retour

centi 42> cat uniq.dat | uniq -c 1 Michelle est de retour 3 Minou à Moi 2 Michelle est de retour 2 Michelle est de retourcenti 43> uniq -d uniq.datMinou à MoiMichelle est de retourMichelle est de retourcenti 44> uniq -u < uniq.datMichelle est de retourcenti 45>

Lignes qui ne sont pas uniquesLignes qui ne sont pas uniques

Lignes qui sont uniquesLignes qui sont uniques

uniq.datuniq.dat

Page 17: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

17

Filtres tr (1)

Fonctionnement du filtre:

Remplacer un ensemble de données en un autre ensemble de données. Ce filtre accepte certains méta-caractères de regex.

Synopsis:

tr [options] [chaine1 [chaine2]]

-c Complément de l’ensemble des caractères représentés par la chaine1

-d Éliminer de l’entrée standard les caractères qui correspondent à ceux

de chaine1

-s Réduire une séquence de caractères identiques en un seul caractère.

La spécification de chaine2 est facultative

Page 18: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

18

Filtres tr (2)

Statuts de sortie: 0 Pas d’erreur >0 erreur rencontrée

Note 1) Pour éliminer les caractères contenus dans chaine1 du flux d’entrée, simplement ne pas spécifier chaine2 et utiliser l’option –d.

Note 2) le remplacement s’effectue caractère par caractère. Donc, l’ordre des caractères dans chaine1 et chaine2 est important.

Page 19: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

19

Je suis ici vous voircher Monsieur Jean.Comment ça va mon cher Watson ?Non, Pas le Dr. Watson de Windows!

com m 1.dat

centi 49> tr -cs "[A-Z][a-z]" "[\n*]" < comm1.datJesuisicivousvoircherMonsieurJeanCommentavamoncherWatsonNonPasleDrWatsondeWindows

Pourquoi ce résultat ?Pourquoi ce résultat ?

Filtres tr (3)

Exemple:

Page 20: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Exemple:

Observez bien le rôle de l’option -s.

La chaine2 n’est pas spécifiée. Alors remplace les multiples apparitions du

caractère de chaine1 par le même caractère de chaine1 (le caractère espace).

20

centi 49> ls -ltotal 6-rw-r--r-- 1 wong recherche 109 mars 20 23:40 comm1.dat-rw-r--r-- 1 wong recherche 106 mars 20 23:41 comm2.dat-rw-r--r-- 1 wong recherche 153 mars 21 01:12 uniq.datcenti 50> ls -l | tr -s ' 'total 6-rw-r--r-- 1 wong recherche 109 mars 20 23:40 comm1.dat-rw-r--r-- 1 wong recherche 106 mars 20 23:41 comm2.dat-rw-r--r-- 1 wong recherche 153 mars 21 01:12 uniq.dat

Filtres tr (4)

Page 21: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

21

Filtres cut (1)

Fonctionnement du filtre:

Sélectionner des champs des lignes d’entrées.

Ce filtre accepte des lignes de l’entrée standard ou des fichiers.

Synopsis:

cut –c liste [fichier …]

cut –f liste [-d car] [-s] [fichier …]

-cliste liste indique les positions en termes de caractères. Par

exemple, -c1-72 signifie les 72 premiers caractères de chaque

ligne

Page 22: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

22

Filtres cut (2)

Statuts de sortie: 0 Pas d’erreur >0 erreur rencontrée

-f liste liste indique les positions en termes de champs entourés par des caractères spécifiques. Par défaut, ce sont les blancs d’une ligne (Espace ou Tab). Par exemple, -f1,7 signifie les 7 premiers champs de chaque ligne.

-d car Le caractère car suivant –d est le séparateur de champ. Par exemple, -d: utilise le symbole : comme séparateur de champ.

-s Suppression des lignes ayant aucun séparateur de champ.

Page 23: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

23

Filtres cut (3)

Note 1) Les champs, dans ce contexte, sont spécifiés par l’option –c

en termes de position de caractères ou par l’option –f en termes de

caractères délimités par le séparateur spécifié par –d. L’argument liste

représente les champs affectés.

Note 2) La spécification des champs est séparée par le symbole ,

(virgule) et droit être en ordre croissant (ex : 1,4,7). Il est permis de

spécifier une plage de champs (ex : 1-5,9).

Page 24: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

24

Filtres cut (4)

centi 75> ls -ltotal 8-rw-r--r-- 1 wong recherche 59 mars 21 01:14 #-rw-r--r-- 1 wong recherche 109 mars 20 23:40 comm1.dat-rw-r--r-- 1 wong recherche 106 mars 20 23:41 comm2.dat-rw-r--r-- 1 wong recherche 153 mars 21 01:12 uniq.datcenti 76> ls -l | cut -c1-10,55-total 8-rw-r--r-- #-rw-r--r-- comm1.dat-rw-r--r-- comm2.dat-rw-r--r-- uniq.datcenti 77> ls -l | tr -s ' ' ':*'total:8-rw-r--r--:1:wong:recherche:59:mars:21:01:14:#-rw-r--r--:1:wong:recherche:109:mars:20:23:40:comm1.dat-rw-r--r--:1:wong:recherche:106:mars:20:23:41:comm2.dat-rw-r--r--:1:wong:recherche:153:mars:21:01:12:uniq.datcenti 78> ls -l | tr -s ' ' ':*' | cut -f1,3,10 -d: | tr ':' ' 'total-rw-r--r-- wong #-rw-r--r-- wong comm1.dat-rw-r--r-- wong comm2.dat-rw-r--r-- wong uniq.dat

Exemple:

Page 25: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

25

Filtres egrep (1)

Fonctionnement du filtre:

Trouver des caractères dans un ensemble de données.

Ce filtre fait partie de la famille des filtres grep (global regular expression

print). La chaîne de caractères recherchée est décrite par une regex.

Synopsis:

egrep [options] [-e expr] [expression] [-f fich] [fichiers …]

Page 26: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

26

Filtres egrep (2)

-b Afficher au début de chaque ligne trouvée, le numéro de bloc sur le disque

-c Afficher uniquement le nombre de lignes contenant la chaîne

-h N’afficher pas les noms de fichier

-i Ne pas faire de distinction entre les majuscules et les minuscules

-s Aucune sortie sauf les messages d’erreur

-e Nécessaire pour les expressions régulières commençant par un tiret

-f fich Expression régulière est contenue dans le fichier fich

Statuts de sortie: 0 la chaîne est trouvée 1 la chaîne n’est pas trouvée 2 erreur(s) rencontrée(s)

Page 27: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

27

Filtres egrep (3)

Note 1) egrep(1) recherche les lignes qui contiennent la ou les

chaînes de caractères indiquées par expr ou expression. Par

défaut, les lignes trouvées sont envoyées à la sortie standard.

Note 2) Lire l’aide en-ligne de egrep(1) pour connaître les

expressions génériques acceptées.

Page 28: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

28

centi 4> ypcat passwd | egrep ':Pierre.*'parp2808:cRuT6m7jPRJWM:30502:112:Pierre Parent:/export/home/exa/email/parp2808:/bin/cshdoup2609:S3i0oM68.AuVQ:30251:112:Pierre Doucet:/export/home/exa/email/doup2609:/bin/cshrobcad22:Z.VGpH9oanp3M:11423:114:Pierre St-Denis:/usr/people/exa/robcad/robcad22:/bin/cshgaup2806:8fZaJLAA4ybOY:30848:112:Pierre-Luc Gauthier:/export/home/exa/email/gaup2806:/bin/cshdupp0911:LBXJgdV.Zl8lg:30267:112:Pierre Duplessis:/export/home/exa/email/dupp0911:/bin/cshgerp1209:JLiqJTddvRdJY:30307:112:Pierre Hugues Gervaud:/export/home/exa/email/gerp1209:/bin/cshgefp0904:zHizZC2VwOjlQ:30304:112:Pierre Olivier Geffroy:/export/home/exa/email/gefp0904:/bin/cshboup0806:aX.t0b2BGmZcM:30804:112:Pierre-Etienne Bouchard:/export/home/exa/email/boup0806:/bin/cshgrop2001:jzWiOWxd.2iPQ:30966:112:Pierre Grondin:/export/home/exa/email/grop2001:/bin/cshduvp0101:4jttBQNX/rHcg:30271:112:Pierre-Yves Duval:/export/home/exa/email/duvp0101:/bin/cshhabp0410:ytzP1NEqscex2:30857:112:Pierre-Luc Habel:/export/home/exa/email/habp0410:/bin/csh: : :

Filtres egrep (4)

Exemple:

Page 29: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

29

centi 5> ypcat passwd | egrep ':Pierre .*'parp2808:cRuT6m7jPRJWM:30502:112:Pierre Parent:/export/home/exa/email/parp2808:/bin/cshdoup2609:S3i0oM68.AuVQ:30251:112:Pierre Doucet:/export/home/exa/email/doup2609:/bin/cshrobcad22:Z.VGpH9oanp3M:11423:114:Pierre St-Denis:/usr/people/exa/robcad/robcad22:/bin/cshdupp0911:LBXJgdV.Zl8lg:30267:112:Pierre Duplessis:/export/home/exa/email/dupp0911:/bin/csh

gerp1209:JLiqJTddvRdJY:30307:112:Pierre Hugues Gervaud:/export/home/exa/email/gerp1209:/bin/cshgefp0904:zHizZC2VwOjlQ:30304:112:Pierre Olivier Geffroy:/export/home/exa/email/gefp0904:/bin/cshgrop2001:jzWiOWxd.2iPQ:30966:112:Pierre Grondin:/export/home/exa/email/grop2001:/bin/cshstdp2705:srllvkqzhiJho:30582:112:Pierre St-Denis:/export/home/exa/email/stdp2705:/bin/cshberp0604:mOT.Bp4f9rQ3I:30138:112:Pierre Berube:/export/home/exa/email/berp0604:/bin/cshpinp2309:lkVu0qUAYsMmg:30519:112:Pierre Pinard:/export/home/exa/email/pinp2309:/bin/cshdaup2612:6qqRrxMOkIbkA:30220:112:Pierre Noel Dautrey:/export/home/exa/email/daup2612:/bin/csh: : :

Filtres egrep (5)

Exemple:

Page 30: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

30

$ egrep '[.,!]' *comm1.dat :cher Monsieur Jean.comm1.dat :Non, Pas le Dr. Watson de Windows!comm2.dat :Non, Pas le Dr. Watson de Holms!

Trouver le caractère point ou le caractère virgule Trouver le caractère point ou le caractère virgule ou le caractère point exclamation dans tous les ou le caractère point exclamation dans tous les fichiers du répertoire courant.fichiers du répertoire courant.

Le filtre egrep (grep, fgrep, etc.) est très utile Le filtre egrep (grep, fgrep, etc.) est très utile dans la recherche des patrons dans un fichier ou dans la recherche des patrons dans un fichier ou un ensemble de fichiers. De plus, la vitesse un ensemble de fichiers. De plus, la vitesse d’exécution de egrep est très très grande!d’exécution de egrep est très très grande!

Filtres egrep (6)

Exemple:

Page 31: Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe Roberge Jean-Philippe

Références

[1] Présentations PowerPoint du cours GPA435, Tony Wong.

[2] Notes de cours, GPA435

[3] Levasseur, Yan, Wiki GPA435: http://bash.leyan.org/Accueil , consulté en avril 2014.

[4] Tanenbaum, A.S., Systèmes d’exploitation. Pearson Education France, 2008.

[5] Stallings, W., Operating Systems : Internals and Design Principals. Upper Saddle River, NJ : Prentice Hall, 1998.

[6] Références citées dans le premier chapitre des notes de cours.

31 Jean-Philippe Roberge - Avril 2014