1
GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de systèmesystème
Copyright, 2000 © Tony Wong, Ph.D.
Chapitre 8Filtres UNIX
Université du Québec
École de technologie supérieureDépartem ent de génie de la production autom atisée
2
Filtres UNIX (1)Filtres UNIX (1)• Les filtres UNIX sont des commandes Les filtres UNIX sont des commandes
qui acceptent des données de l’entrée qui acceptent des données de l’entrée standard, effectuent des standard, effectuent des transformations sur ces données et transformations sur ces données et les dirigent vers la sortie standard. les dirigent vers la sortie standard.
Système d’exploitation UNIX
F iltre U N I X(com m ande)
Entréestandard
Sortiestandard
DonnéesDonnéestransform ées
3
Filtres UNIX (2)Filtres UNIX (2)
Système d’exploitation UNIX
Pour les besoins de ce cours:Pour les besoins de ce cours: Un filtre transforme les données présentées Un filtre transforme les données présentées
à son entrée (et de d’autres sources).à son entrée (et de d’autres sources). Un filtre achemine les données Un filtre achemine les données
transformées à sa sortie standard (et vers transformées à sa sortie standard (et vers d’autres destinations).d’autres destinations).
Un filtre affiche ses messages d’erreur vers Un filtre affiche ses messages d’erreur vers la sortie erreur standard.la sortie erreur standard.
Donc, pas toutes les commandes UNIX Donc, pas toutes les commandes UNIX sont des filtres (dans le sens défini ci-sont des filtres (dans le sens défini ci-dessus).dessus).
4
Filtre comm(1)Filtre comm(1)
Système d’exploitation UNIX
comm(1) compare le contenu de deux ensembles de comm(1) compare le contenu de deux ensembles de données.données. L’un des deux ensemble peut provenir de l ’entrée standard.L’un des deux ensemble peut provenir de l ’entrée standard. Synopsis:Synopsis:
comm [options] fichier1 fichier2comm [options] fichier1 fichier2-1 Ne pas afficher la première colonne (les lignes présentent uniquement dans le -1 Ne pas afficher la première colonne (les lignes présentent uniquement dans le
fichier1)fichier1)
-2 Ne pas afficher la deuxième colonne (les lignes présentent uniquement dans le -2 Ne pas afficher la deuxième colonne (les lignes présentent uniquement dans le fichier2)fichier2)
-3 Ne pas afficher dans la troisième colonne (les lignes présentent dans les deux -3 Ne pas afficher dans la troisième colonne (les lignes présentent dans les deux fichiers)fichiers)
5
Filtre comm(1)Filtre comm(1) Note: si le nom de l’un des fichiers est Note: si le nom de l’un des fichiers est
le caractère le caractère -- alors son contenu est lu alors son contenu est lu de l ’entrée standard.de l ’entrée standard.
Statut de sortie:Statut de sortie:0 pour indiquer qu’il n’y a pas eu 0 pour indiquer qu’il n’y a pas eu
d’erreur;d’erreur;>0 pour indiquer qu’une erreur est >0 pour indiquer qu’une erreur est
rencontrée.rencontrée. Exemple:Exemple:
Système d’exploitation UNIX
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
6
Filtre comm(1)Filtre comm(1) Exemple (suite):Exemple (suite):
Système d’exploitation UNIX
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
7
Filtre diff(1)Filtre diff(1)diff(1) donne les différences entre deux ensembles de diff(1) donne les différences entre deux ensembles de
données.données. Ce filtre accepte des noms de répertoire.Ce filtre accepte des noms de répertoire. Synopsis:Synopsis:
diff [options] fichier1 fichier2diff [options] fichier1 fichier2
diff [options] fichier1 répertoirediff [options] fichier1 répertoire
diff [options] répertoire fichier1diff [options] répertoire fichier1
diff [options] répertoire1 répertoire2diff [options] répertoire1 répertoire2
Système d’exploitation UNIX
8
Filtre diff(1)Filtre diff(1) Synopsis (suite):Synopsis (suite):
-b Ignorer les blancs (Espace et Tab) à la fin d’une ligne-b Ignorer les blancs (Espace et Tab) à la fin d’une ligne
-c[n] Afficher le contexte où les lignes différentes ont été -c[n] Afficher le contexte où les lignes différentes ont été trouvéestrouvées
Statut de sortie:Statut de sortie:0 Pas de différence rencontrée0 Pas de différence rencontrée
1 Des différences ont été relevées1 Des différences ont été relevées
>1 Une erreur est rencontrée>1 Une erreur est rencontrée
Système d’exploitation UNIX
9
Filtre diff(1)Filtre diff(1)
Système d’exploitation UNIX
Interprétation des résultats de sortie:Interprétation des résultats de sortie:
addition (a), élimination (d) et changement (c)addition (a), élimination (d) et changement (c)
En effectuant ces opérations, les deux ensembles de données deviendront En effectuant ces opérations, les deux ensembles de données deviendront identiques.identiques.
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.
10
Filtre diff(1)Filtre diff(1)
Système d’exploitation UNIX
Exemple:Exemple:
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>
??
11
Filtre uniq(1)Filtre uniq(1)Montrer les lignes uniques d’un ensemble de données.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.Ce filtre accepte des données de l ’entrée standard ou d’un fichier. Synopsis:Synopsis:
uniq [options] [-n] [+c] [fentree] [fsortie]uniq [options] [-n] [+c] [fentree] [fsortie]-c -c Afficher le nombre d’apparition de la ligneAfficher le nombre d’apparition de la ligne
-d-d Afficher uniquement les lignes répétéesAfficher uniquement les lignes répétées
-u-u Afficher les lignes qui ne sont pas répétéesAfficher les lignes qui ne sont pas répétées
-n-n Ignorer les n premiers champs des lignesIgnorer les n premiers champs des lignes
+c+c Ignorer les c premiers caractères des lignesIgnorer les c premiers caractères des lignes
Système d’exploitation UNIX
12
Filtre uniq(1)Filtre uniq(1) Synopsis (suite):Synopsis (suite):
fentreefentree fichier d’entrée (rien=entrée std)fichier d’entrée (rien=entrée std)
fsortiefsortie fichier de sortie (rien=sortie std)fichier de sortie (rien=sortie std)
Statut de sortie:Statut de sortie:0 Pas d’erreur0 Pas d’erreur
>0 erreur rencontrée>0 erreur rencontrée
Note: Un champ est un ensemble de caractères entourés de Note: Un champ est un ensemble de caractères entourés de caractères espaces ou Tab. Il peut exister 1 ou plusieurs champs caractères espaces ou Tab. Il peut exister 1 ou plusieurs champs dans une ligne. dans une ligne.
Système d’exploitation UNIX
13
Filtre uniq(1)Filtre uniq(1) Exemple:Exemple:
Système d’exploitation UNIX
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
14
Filtre tr(1)Filtre tr(1)
Système d’exploitation UNIX
Remplacer un ensemble de données en un autre ensemble Remplacer un ensemble de données en un autre ensemble de données.de données. Ce filtre accepte certains méta-caractères de regex.Ce filtre accepte certains méta-caractères de regex. Synopsis:Synopsis:
tr [options] [chaine1 [chaine2]]tr [options] [chaine1 [chaine2]]-c Complément de l’ensemble des caractères représentés par la chaine1-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-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 -s Réduire une séquence de caractères identiques en un seul caractère. La spécification de chaine2 est facultativespécification de chaine2 est facultative
15
Filtre tr(1)Filtre tr(1) Statut de sortie:Statut de sortie:
0 Pas d’erreur0 Pas d’erreur
>0 erreur rencontrée>0 erreur rencontrée
Note: Note: Pour éliminer les caractères Pour éliminer les caractères contenus dans chaine1 du flux contenus dans chaine1 du flux d’entrée, simplement ne pas spécifier d’entrée, simplement ne pas spécifier chaine2 et utiliser l’option –d.chaine2 et utiliser l’option –d.
Note: le remplacement s’effectue Note: le remplacement s’effectue caractère par caractère. Donc, l’ordre caractère par caractère. Donc, l’ordre des caractères dans chaine1 et chaine2 des caractères dans chaine1 et chaine2 est important.est important.
Système d’exploitation UNIX
16
Filtre tr(1)Filtre tr(1) Exemple:Exemple:
Système d’exploitation UNIX
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 ?
17
Filtre tr(1)Filtre tr(1)
Système d’exploitation UNIX
Exemple:Exemple:
Observer bien le rôle de l’option -s.Observer bien le rôle de l’option -s.
La chaine2 n’est pas spécifiée. Alors remplace les multiples apparitions du 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 caractère de chaine1 par le même caractère de chaine1 (le caractère espace).espace).
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
18
Filtre cut(1)Filtre cut(1)
Système d’exploitation UNIX
Sélectionner des champs des lignes d’entrées.Sélectionner des champs des lignes d’entrées. Ce filtre accepte des lignes de l’entrée standard ou des Ce filtre accepte des lignes de l’entrée standard ou des
fichiers.fichiers. Synopsis:Synopsis:
cut –c liste [fichier …]cut –c liste [fichier …]
cut –f liste [-d car] [-s] [fichier …]cut –f liste [-d car] [-s] [fichier …]-cliste liste indique les positions en termes de caractères. Par exemple, -cliste liste indique les positions en termes de caractères. Par exemple,
-c1-72 signifie les 72 premiers caractères de chaque ligne-c1-72 signifie les 72 premiers caractères de chaque ligne
19
Filtre cut(1)Filtre cut(1)
Système d’exploitation UNIX
-fliste liste indique les positions en termes de -fliste liste indique les positions en termes de champs entourés par des caractères spécifiques. champs entourés par des caractères spécifiques. Par défaut, ce sont les blancs d’une ligne (Espace Par défaut, ce sont les blancs d’une ligne (Espace ou Tab). Par exemple, -f1,7 signifie les 7 ou Tab). Par exemple, -f1,7 signifie les 7 premiers champs de chaque lignepremiers champs de chaque ligne
-dcar Le caractère car suivant –d est le séparateur -dcar Le caractère car suivant –d est le séparateur de champ. Par exemple, -d: utilise le symbole : de champ. Par exemple, -d: utilise le symbole : comme séparateur de champcomme séparateur de champ
-s Suppression des lignes ayant aucun séparateur -s Suppression des lignes ayant aucun séparateur de champde champ
Statut de sortie:Statut de sortie:0 Pas d’erreur0 Pas d’erreur
>0 erreur rencontrée>0 erreur rencontrée
20
Filtre cut(1)Filtre cut(1) Note: Note: Les champs, dans ce contexte, sont Les champs, dans ce contexte, sont
spécifiés par l’option –c en termes de spécifiés par l’option –c en termes de position de caractères ou par l’option –f position de caractères ou par l’option –f en termes de caractères délimités par le en termes de caractères délimités par le séparateur spécifié par –d. L’argument séparateur spécifié par –d. L’argument liste représente les champs affectés.liste représente les champs affectés.
Note: La spécification des champs est Note: La spécification des champs est séparée par le symbole , (virgule) et droit séparée par le symbole , (virgule) et droit être en ordre croissant (ex : 1,4,7). Il est être en ordre croissant (ex : 1,4,7). Il est permis de spécifier une plage de champs permis de spécifier une plage de champs (ex : 1-5,9).(ex : 1-5,9).
Système d’exploitation UNIX
21
Filtre cut(1)Filtre cut(1)
Système d’exploitation UNIX
Exemple:Exemple:
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
22
Filtre egrep(1)Filtre egrep(1)
Système d’exploitation UNIX
Trouver des caractères dans un ensemble de données.Trouver des caractères dans un ensemble de données. Ce filtre fait partie de la famille des filtres grep (Ce filtre fait partie de la famille des filtres grep (global global
regular expression printregular expression print). La chaîne de caractères ). La chaîne de caractères recherchée est décrite par une regex.recherchée est décrite par une regex.
Synopsis:Synopsis:
egrep [options] [-e expr] [expression] [-f fich] [fichiers …]egrep [options] [-e expr] [expression] [-f fich] [fichiers …]-b Afficher au début de chaque ligne trouvée, le numéro de bloc sur le disque-b Afficher au début de chaque ligne trouvée, le numéro de bloc sur le disque
23
Filtre egrep(1)Filtre egrep(1)
Système d’exploitation UNIX
-c Afficher uniquement le nombre de lignes contenant la -c Afficher uniquement le nombre de lignes contenant la chaînechaîne
-h N’afficher pas les noms de fichier-h N’afficher pas les noms de fichier
-i Ne pas faire de distinction entre les majuscules et les -i Ne pas faire de distinction entre les majuscules et les minusculesminuscules
-s Aucune sortie sauf les messages d’erreur-s Aucune sortie sauf les messages d’erreur
-e Nécessaire pour les expressions régulières commençant -e Nécessaire pour les expressions régulières commençant par un tiretpar un tiret
-f fich Expression régulière est contenue dans le fichier fich-f fich Expression régulière est contenue dans le fichier fich
Statut de sortie:Statut de sortie:0 0 la chaîne est trouvéela chaîne est trouvée11 la chaîne n’est pas trouvéela chaîne n’est pas trouvée2 erreur(s) rencontrée(s)2 erreur(s) rencontrée(s)
24
Filtre egrep(1)Filtre egrep(1)
Système d’exploitation UNIX
Note: egrep(1) Note: egrep(1) recherche les lignes qui recherche les lignes qui contiennent la ou les chaînes de contiennent la ou les chaînes de caractères indiquées par expr ou caractères indiquées par expr ou expression. Par défaut, les lignes expression. Par défaut, les lignes trouvées sont envoyées à la sortie trouvées sont envoyées à la sortie standard.standard.
Note: Lire l’aide en-ligne de egrep(1) Note: Lire l’aide en-ligne de egrep(1) pour connaître les expressions pour connaître les expressions génériques acceptées.génériques acceptées.
25
Filtre egrep(1)Filtre egrep(1)
Système d’exploitation UNIX
Exemple:Exemple:
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: : :
26
Filtre egrep(1)Filtre egrep(1)
Système d’exploitation UNIX
Exemple:Exemple: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: : :
27
Filtre egrep(1)Filtre egrep(1)
Système d’exploitation UNIX
Exemple:Exemple:
$ 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 Trouver le caractère point ou le caractère virgule ou le caractère point exclamation virgule ou le caractère point exclamation dans tous les fichiers du répertoire dans tous les fichiers du répertoire courant.courant.
Le filtre egrep (grep, fgrep, etc.) est très Le filtre egrep (grep, fgrep, etc.) est très utile dans la recherche des patrons dans utile dans la recherche des patrons dans un fichier ou un ensemble de fichiers. De un fichier ou un ensemble de fichiers. De plus, la vitesse d’exécution de egrep est plus, la vitesse d’exécution de egrep est très très grande!très très grande!