0% ont trouvé ce document utile (0 vote)
2 vues16 pages

Filtres et redirections sous Unix

Transféré par

Ens BOUKHADRA Adel
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues16 pages

Filtres et redirections sous Unix

Transféré par

Ens BOUKHADRA Adel
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université de Reims Les filtres sous Unix

Les filtres sous Unix


Avertissement : Toutes les commandes données dans ce cours sont
issues d’une SuSe Linux 7.1 avec bash comme shell. Le nom et la syn-
taxe des commandes présentées peuvent évoluer en fonction des versions
utilisées.

Pascal Mignot 1
Université de Reims Les filtres sous Unix

Notion d’entrée/sortie et de filtre


➤ On définit :
stdin est l’entrée standard, cad où les informations attendues en
entrée sont lues (par défaut le clavier). Descripteur = 0.
stdout est la sortie standard, cad où les résultats d’une commande
sont transmis (par défaut l’écran). Descripteur = 1.
stderr est la sortie d’erreur, cad où les messages d’erreur sont trans-
mis (par défaut l’écran). Descripteur = 2.

➤ Unix offre des possibilités avancées pour la gestion des entrées et des
sorties d’une commande. Elles se résument en deux concepts :
● les redirections
◆ redirection de sortie :
la sortie d’une commande PSfrag replacements
est envoyée vers
exec.
un fichier (par exemple).
◆ redirection d’entrée :
l’entrée d’une commandePSfrag
est luereplacements
depuis un
exec.
fichier (par exemple).
● le pipelining
la sortie d’une commande est uti-
PSfrag replacements
lisée comme entrée d’une autre com- exec. exec.
mande.

➤ Un filtre est une commande ayant les capacités :


● de lire son entrée sur le canal d’entrée standard
ou depuis un fichier ou un ensemble de fichiers
PSfrag replacements out
passés en paramètre. in exec. err
● d’écrire sa sortie sur le canal de sortie standard
et ses erreurs sur le canal de sortie d’erreur.

➤ Exemple de combinaison de filtres par pipelining

exec exec exec

Pascal Mignot 2
Université de Reims Les filtres sous Unix

Syntaxe de redirection et de pipelining


➤ Syntaxe des redirections
command > file : place le résultat de la sortie de command (stdout)
dans le fichier nommé file. Si file existe, il est écrasé ; sinon,
il est crée.
command 2> file : comme ci-dessus, mais concerne la sortie stderr
(i.e. les messages d’erreur issus de la commande).
command >> file : ajoute à la fin du fichier file le résultat de
la sortie de command (stdout). Si le fichier n’existe pas, il est
créé.
command 2>> file : comme ci-dessus, mais concerne la sortie
stderr.
command < file : prend comme entrée (stdinn) de la commande
command le contenu du fichier file. Ce fichier contient en
général soit les données à traiter (cas des filtres), soit les
réponses aux questions posées par un programme (cas des
programmes inter-actifs).

➤ Syntaxe de pipelining
command1 | command2 : passe le résultat de la sortie de command1
comme entrée à command2.
command1 | tee file | command2 : comme ci-dessus, mais la sor-
tie de command1 est en plus placée dans le fichier file.

➤ Le fichier virtuel /dev/null


/dev/null est un fichier virtuel toujours vide utilisée dqns les
redirections.
utilisé en entrée , il n’envoie rien (on l’utilise pour s’assurer
qu’une commande ne reçoit rien en entrée).
utilisé en sortie , il joue le rôle de poubelle (on redirige dans
/dev/null les sorties que l’on ne souhaite pas).

Pascal Mignot 3
Université de Reims Les filtres sous Unix

Filtres d’affichage
❏ cat : affichage.
❑ affichage simple : cat fichier
❑ concaténation de fichier : cat fichier 1 ... fichier n
Les fichiers fichier i sont envoyés dans l’ordre et sans séparation
vers stdout.
❑ création de fichier : cat > fichier
mon texte.
ˆD
Aucun fichier n’est donné en entrée, c’est donc l’entrée stdin
standard (le clavier) qui est utilisée et redirigée vers fichier.

❏ more (less) : affichage avec pause à chaque page.


❑ consultation d’un fichier : more fichier
Possède des commandes de recherche similaires à celle de vi.
❑ consultation page à page du résultat d’une commande :
command | more
Cette commande étant interactive, sa sortie n’est généralement ni
redirigée ni pipée.

❏ head : affichage du début du flux d’entrée.


options : -n n : affichage des n premières lignes (ou -n).
-c n : affichage des n premiers caractères.

❏ tail : affichage de la fin du flux d’entrée.


options : -n n : affichage des n dernières lignes (ou ±n).
-c n : affichage des n derniers caractères.
si le paramètre n est immédiatement précédé du signe +, alors la
référence est prise depuis le début du fichier (par exemple, la fin du
fichier en commençant à la nième ligne).

❏ rev : affichage inversé du flux d’entrée (ligne à ligne).

Pascal Mignot 4
Université de Reims Les filtres sous Unix

Analyse de flux
❏ od : dump au format choisi (permet l’analyse de flux texte ou bi-
naire).
❑ Options :
-t c : affiche au format décrit par c où c peut prendre les valeurs :
c caractères.
a caractères nommés.
dn entier sur n octets.
un entier non signé sur n octets.
xn hexadécimal sur n octets.
f n flottant sur n octets.
-wn : sortie avec n bytes par ligne.
❑ Exemple
% od -t a -w8 toto
0000000 a a a b b c c sp
0000010 c c c b b a a a
0000020 nl
% od -t x1 -w8 toto
0000000 61 61 61 62 62 63 63 20
0000010 63 63 63 62 62 61 61 61
0000020 0a
0000021
% od -t u1 -w8 toto
0000000 97 97 97 98 98 99 99 32
0000010 99 99 99 98 98 97 97 97
0000020 10
0000021

❏ wc : comptage des lignes, mots et caractères.


❑ Options
sans option équivalent à -lwc.
-c renvoie le nombre de caractères.
-w renvoie le nombre de mots.
-l renvoie le nombre de lignes.
❑ Exemple
% cat toto
aaabbcc cccbbaaa
% wc toto
1 2 17 toto

Pascal Mignot 5
Université de Reims Les filtres sous Unix

Filtre de tri : sort


Tri ligne à ligne par ordre croissant.
❏ Principales options :
-n tri numérique (-g pour les réels).
-r inverser l’ordre du tri.
-f ne pas différencier majuscules et minuscules.
-t c utiliser le caractère c comme séparateur de
champs dans la ligne (par défaut, l’espace).
-k fields tri en fonction du sélecteur de champ.

❏ Principe de sélection des champs (fields) :


n,n tri selon le n ième champ.
n tri selon la fin de la ligne en commençant à
partir du n ième champ.
n.m tri selon la fin de la ligne en commençant à
partir du m ième caractère du n ième champ.
n1 , n2 tri selon les champs à partir du champ n1 et
jusqu’au champ n2 .
n1.m1 , n2.m2 etc ...

❏ Exemple : si une ligne du fichier à trier est la suivante :


toto titi ta :ta
alors :
✦ si l’option -t n’est pas précisée, il y a 3 champs : toto, titi et
ta :ta.
✦ avec l’option -t :, il y a deux champs : toto titi ta et ta.
✦ l’option -k 2,2 fait le tri sur le deuxième champ seulement
(titi).
✦ l’option -k 2.2 fait le tri à partir du deuxième caractère du
deuxième champ (ti ta :ta).

Pascal Mignot 6
Université de Reims Les filtres sous Unix

Gestion des entrées multiples : uniq


Gestion des entrées multiples d’un flux trié.

❏ Options de gestion :
affiche les lignes en supprimant les entrées multiples
-u affiche seulement les lignes uniques
-c affiche le nombre d’occurence.
-d affiche seulement les lignes multiples.

❏ Options sur les champs :


-f n saute les n premiers champs.
-i ignorer la casse (minuscules/majuscules).

❏ Exemple :
% cat toto
1
1
1
2
2
3

% uniq toto
1
2
3

% uniq -d toto
1
2

% uniq -u toto
3

% uniq -c toto
3 1
2 2
1 3

Pascal Mignot 7
Université de Reims Les filtres sous Unix

Gestion de champs
❏ cut : extractions et réorganisation de champs.
❑ Options principales :
-c liste coupure en mode caractère.
-f liste coupure en mode champ.
-d c utiliser le caractère c comme séparateur de champs (par
défaut, la tabulation).
❑ Format de la liste :
n le nième.
n,m le nième et le mième.
n-m du nième au mième.
n- du nième à la fin.
-n du 1er au nième.
❑ Exemple :
% cat toto % cut -c 2-4,5 toto % cut -f 3,1 toto
1 2 3 2 3 1 3
12 23 34 2 23 12 34

❏ join1 : union de deux fichiers par un champ commun (jointure).


❑ Syntaxe :
join -1 c1 -2 c2 -o field list fichier 1 fichier 2
La jointure des deux fichiers est réalisée en utilisant le champ c 1
dans fichier 1 et le champ c2 dans fichier 2 (par défaut, séparés
par des blancs). Les champs affichés en sortie sont ceux spécifiés
par field list.
❑ Liste des champs de sortie (field list) : les indications sui-
vantes sont séparées par des virgules.
0 le champ de jointure.
1.n le nième champ du 1er fichier.
2.m le mième champ du 2nd fichier.
❑ Exemple :
% cat auteurs % join -1 2 -2 1 auteurs livres
victor hugo hugo victor hernani
arthur rimbaud rimbaud arthur illuminations
% cat livres % join -1 2 -2 1 -o 1.1,2.2 auteurs livres
hugo hernani victor hernani
rimbaud illuminations arthur illuminations
1 Cen’est pas un filtre. ATTENTION : les implémentations de join peuvent conduire à des comporte-
ments très différents d’un système à l’autre.

Pascal Mignot 8
Université de Reims Les filtres sous Unix

Modification d’un flux


❏ tr : transcodage et supression des caractères. La seule entrée de ce
filtre est stdin.
❑ Options :
table tablefin transcodage de tous les caractères contenus
dans table un à un avec les caractères contenus
dans tablefin (de même longueur que table).
-d table suppression de tous les caractères contenus
dans table.
-s table suppression des occurences multiples consé-
cutives des caractères contenus dans table.
-c inversion de table.
❑ Table de caractères : les tables de caractères sont à donner
entre crochets, avec les facilités suivantes :
A-F les caractères de A à F.
A*4 le caractère A répété 4 fois.
A* (dans tablefin seulement) autant de A qu’il faut pour
atteindre la longeur de table.
❑ Exemples :
% cat toto % cat toto | tr -s [bc]
aaabbcc cccbbaaa aaabc cbaaa
% cat toto | tr [a-c] [A-C] % cat toto | tr [a-c] [-*]
AAABBCC CCCBBAAA ------- --------
% cat toto | tr -d [ac] % cat toto | tr -dc [ac]
bb bb aaacccccaaa
❏ sed : éditeur de texte batch (édition automatique d’un texte par une
suite d’instructions programmées).
Les instructions les plus directement utilisables sont la substitution
et la suppression :
s/expr1 /expr2 /g remplace partout expr1 par expr2.
/expr/d efface toutes les lignes contenant expr.

❑ Exemple : % cat toto % cat titi


aaabbcc cccbbaaa s/b/bc/g
% sed s/a//g toto s/c/de/g
bbcc cccbb % sed -f titi toto
aaabdebdedede dededebdebdeaaa

Pascal Mignot 9
Université de Reims Les filtres sous Unix

Expressions régulières
Les expressions régulières sont utilisées dans de nombreux programmes
ou filtres Unix lorsque des chaı̂nes de caractères sont à rechercher. At-
tention, toutes les fonctionnalités ci-dessous (norme POSIX 1003.2) ne
sont pas nécessairement présentes.
❏ Caractères ou de groupe de caractères
c le catactère c si ce n’est pas un meta-caractère.
\c le caractère littéral c dans le cas d’un meta-caractère.
. un caractère, n’importe lequel (saut de ligne compris).
M-R la plage des caractères de M à R.
[abc...] un caractère parmi abc... (ceux spécifiés entre crochets).
[ˆabc...] un caractère qui n’est pas parmi abc... (aucun de ceux
spécifiés entre crochets).
❏ Répétition : on répète une expression en plaçant immédiatement
après l’un des opérateurs suivants :
* se répète un nombre quelconque de fois (0 compris).
+ se répète au moins une fois.
? se répète au plus une fois.
\{n\} se répète exactement n fois
\{n,\} se répète n fois ou plus.
\{,m\} se répète au plus m fois.
\{n,m\} se répète n fois au moins et m fois au plus.
❏ Groupement : un groupement est une expression régulière exp
contenant toute combinaison de caractères, d’opérateurs, ou de grou-
pement.
exp 1exp 2 correspond à exp 1 puis exp 2 (concaténation).
exp 1|exp 2 correspond à exp 1 ou exp 2.
(exp) groupe le contenu de l’expression exp et la marque.
\n fait référence à la nième expression marquée.
❏ Position
ˆ début de ligne.
$ fin de ligne.
\< début de mot.
\> fin de mot.

Pascal Mignot 10
Université de Reims Les filtres sous Unix

Exemples d’expression régulière

[0-9]+ un nombre entier qui peut commencer par un


ou plusieurs zéros.

[ˆaeyuio] un caractère qui n’est pas une voyelle.

0x[0-9a-fA-F]+ un nombre hexadécimal (par exemple 0xf2a3).

[1-9][0-9]\{3\} un nombre entier à quatre chiffres (dont le pre-


mier n’est pas 0).

[A-Z][a-z]* un mot commençant par une majuscule.

([A-Z]+)|([a-z]+) un mot exclusivement écrit soit en majuscules,


soit en minuscules.

\<loin\. une phrase se terminant par le mot loin.

\.$ une ligne se terminant par un point.

ˆtoto$ toto écrit seul sur une ligne.

(1|2)|(3|4) un chiffre commençant par 1 ou 2 et se termi-


nant par 3 ou 4.

(1|2)\1 soit 11, soit 22.

(1|2)(3|4)\2\1 1331 ou 1441 ou 2332 ou 2442.

Pascal Mignot 11
Université de Reims Les filtres sous Unix

Filtre de recherche : grep


recherche d’expression (régulière) dans un flux.

❏ Définition du critère de recherche :


-e regexp le critère de recherche est défini par regexp
(éventuellement entre double quote).
-f file les critères de recherche sont définis dans le fichier file
(un par ligne).
❏ Options de gestion :
affiche les lignes répondant au critère.
-n préfixe chaque ligne répondant au critère par son
numéro de ligne dans le fichier.
-c compte les lignes répondant au critère.
-l affiche les fichiers répondant au critère.

❏ Autres options :
-i ignorer la casse (minuscules/majuscules).
-v inversion du critère.

-E utilisation d’expressions régulières étendues (grep -E ≡ egrep).


-F utilisation de chaı̂nes fixes comme critère (grep -F ≡ fgrep).

❏ Exemple :
% cat toto
1 2 3
12 23 34
% grep 4$ toto
12 23 34
% grep -n 4$ toto
2:12 23 34
% grep -c 4$ toto
1
% grep -vn 4$ toto
1:1 2 3
% grep -E "([1234]).\1" toto
12 23 34

Pascal Mignot 12
Université de Reims Les filtres sous Unix

Recherche de fichiers : find


(1) les arguments
recherche et exécution de commandes récursivement sur une arbores-
cence2. Toutes les expressions régulières sur les noms de fichier regexf
sont à donner entre simple cote (’)

❏ Argument numérique n : n exactement égal à n.


+n plus grand que n.
−n moins grand que n.
❏ Critères de recherche (extrait) :
-name regexf nom du fichier (-iname pour ignorer la casse).
-path regexf nom du chemin (-ipath pour ignorer la casse).
-amin n accès au fichier il y a n minutes (-atime jours).
-mmin n données du fichier modifiées il y a n minutes.
-empty le fichier est vide.
-perm n la permission du fichier est n (en octal).
-size n la taille du fichier est n (en blocks, nc en byte,
nk en Kb).
-type c le type du fichier est c (d=répertoire, f=fichier,
l=lien).
❏ Tests booleens : si test 1 et test 2 sont deux test de recherche, alors :
( test 1 ) force la précédence.
test 1 -and test 2 test 1 et test 2 (le -and est facultatif).
test 1 -or test 2 test 1 ou test 2 .
-not test 1 test inverse de test 1 .
❏ Actions : elles sont exécutées sur tous les fichiers ou les répertoires
satisfaisant le critère.
-print affichage simple.
-fprint file comme -print, mais sauvegarde dans file.
-ls affichage comme ls -dils
-fls file comme -ls, mais sauvegarde dans file.
-exec commande \ ; exécute commande. \{\} représente le nom du
fichier ou répertoire courant.

2 ce n’est pas un filtre

Pascal Mignot 13
Université de Reims Les filtres sous Unix

Recherche de fichiers : find


(2) exemples
❏ Syntaxe :
find chemin(s) critère(s) action(s)
✦ chemin est le nom du répertoire initial d’où la recherche va com-
mencer. Au moins un chemin est obligatoire (et en première po-
sition).
✦ si aucun critère n’est précisé, tous les fichiers ou répertoires sont
traités.
✦ si aucune commande n’est précisée, l’action par défaut est -print.
❏ Exemples :

% find /home/pascal -name toto -print

recherche le fichier toto dans l’arborescence en dessous de


/home/pascal.

% find /home/pascal -type f -exec chmod =rwxr-xr-x \{\}\ ;

change tous les droits d’accés aux fichiers dans /home/pascal à la


valeur rwxr-xr-x.

% find /home/pascal -mtime +180 -atime +180 -print

affiche tous les fichiers depuis /home/pascal qui n’ont été ni modifiés,
ni changés depuis plus de 6 mois (180 jours).

% find /home/pascal -size +100k -type f -print

trouve tous les fichiers plus gros que 100 ko depuis /home/pascal.

Pascal Mignot 14
Université de Reims Les filtres sous Unix

awk : recherche et traitement de motifs. (1)


awk est un langage de programmation à lui seul dont la syntaxe est
proche de celle du C.
❏ Passage du flux dans awk
❑ awk traite le flux enregistrement par enregistrement (i.e. une
exécution par enregistrement). Par défaut, le séparateur d’enre-
gistrement est la nouvelle ligne.
❑ chaque ligne est divisée en champs en fonction d’un séparateur
(par défaut l’espace).
❏ Structure d’un programme  awk
BEGIN {  ces actions sont exécutées avant l’ou-
actions i verture du flux (par exemple, l’initiali-
} sation des variables FS et RS).


critere 1 { actions 1 }  programme principal : pour enre-
critere 2 { actions 2 } gistrement, pour chaque critère vérifié,
..
 l’action est exécutée.

.
END {
ces actions sont exécutées après la fer-

actions f
 meture du flux.
}
❏ Les variables prédéfinies : lors de l’action, les variables suivantes
sont définies à chaque enregistrement :
NF le nombre de champs dans l’enregistrement
courant.
NR le nombre d’enregistrement déjà lu.
$0 l’enregistrement complet.
$n le champ numéro n (de 1 à NF).
❏ Les critères
❑ critère vide : si aucun critère n’est spécifié, l’action est exécutée
sur tout l’enregistrement.
❑ critère de recherche : /regex /
le critère est vérifié si l’expression régulière regex est trouvée dans
l’enregistrement. Le critère peut être limité à un champ avec :
$n ∼ /regex /.
❑ critère de comparaison : porte sur les variables ou des opérations
sur elles, et suit la syntaxe du C (>,<,>=,<=,==,!=,&&,||,!).

Pascal Mignot 15
Université de Reims Les filtres sous Unix

awk : recherche et traitement de motifs. (2)


❏ Programmation
❑ Structures de controle : syntaxe pareille au C.
if, while, do, for, break, continue, exit.
❑ Entrée/Sortie
getline passe à l’enregistrement suivant.
print var(s) affichage de variables.
printf (...) affichage formaté (idem C)
❑ Traitement de chaı̂ne de caractères
sub, gsub, gensub substitution.
index, match position d’un motif dans une chaı̂ne.
length longueur de chaı̂ne.
split découpage à partir d’un séparateur.
substr extraction d’une sous-chaı̂ne.
tolower,toupper changement de la casse.
❏ Options
-f fichier lecture du programme awk depuis le fichier.
-F i changement du séparateur de champs.
-v var =val assignation d’une valeur à une variable utili-
sable dans awk.
❏ Exemples
awk ’NR % 2 == 0 { print $0 }’ toto
affiche une ligne sur deux du fichier toto.

awk -F ":" ’{ print $1 }’ /etc/passwd


affiche la liste des comptes déclarés dans /etc/passwd.

awk -F ":" ’/^a/{ print $1 }’ /etc/passwd


affiche la liste des comptes commençant par a.

awk ’{ print NR }’ toto


affiche le nombre de ligne du fichier toto.

% wc toto | awk ’{ printf("%s: %d lignes, %d mots, %d caracteres\n",\


$4,$1,$2,$3) }’
toto: 1 lignes, 2 mots, 17 caracteres
formatage de la sortie de wc.

Pascal Mignot 16

Vous aimerez peut-être aussi