Système d’exploitation et mise en œuvre UNIX

Operating Systems, UNIX · lab

Voir tous les documents en systèmes d'exploitation et cloud

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

Filtres sous UNIX

1- E/S standard.

2- Les filtres et redirections.

3- Expressions régulières

4- sort.

5- uniq

6- wc

7- tr

8- sed.

9- awk.

M.Nasri

Page 1

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

1- E/S standard.

(cid:1) Sous Unix, on définit :

(cid:1) stdin : l’entrée standard, l’endroit d’où les informations sont lues (par défaut

c’est le clavier). Le descripteur par défaut est le 0.

(cid:1) stdout : la sortie standard, l’endroit où le résultat d’une commande sera

affiché (par défaut c’est l’écran). Le descripteur associé est 1.

(cid:1) stderr : la sortie des erreurs standards, l’endroit où les erreurs seront

affichées (par default c’est l’écran). Le descripteur associé est 2.

2- Les filtres et redirections.

(cid:1) Unix offre la possibilité de rediriger stdin, stdout, stderr :

(cid:1) Cmd > File : la sortie de la commande ne sera plus affichée sur l’écran mais

écrite dans le fichier File. Si File existe il est écrasé, sinon il sera crée.

(cid:1) Cmd >> File : la sortie de Cmd sera ajoutée dans le fichier File, si File n’existe

pas il sera crée.

(cid:1) Cmd < File : la commande Cmd recevra son entrée depuis le fichier File.

(cid:1) Cmd << « fin » : recevra son entrée depuis la stdin jusqu’à ce que l’utilisateur

tape le mot « fin ».

(cid:1) Cmd 2> File : les erreurs seront redirigées vers File. Si File existe il sera écrasé.

(cid:1) Cmd 2>> File : le stderr sera redirigée et rajoutée vers File. Si File existe il ne

sera pas écrasé. Sinon il sera crée.

(cid:1) Cmd1 | Cmd2 : la sortie de Cmd1 sera redirigé comme entrée vers Cmd2.

(cid:1) Cmd1 | Cmd2 | Cmd3 > tmp : le résultat de Cmd1 est l’entrée de Cmd2, le

résultat de Cmd2 est l’entrée de Cmd3. La sortie de Cmd3 sera redirigée vers

tmp.

(cid:1) /dev/null : est un fichier spécial qui a le comportement d’un puit et dans

lequel toute infos sera perdues.

(cid:1) Donc cmd > /dev/null : ne pas avoir de messages résultat du tout.

(cid:1) Cmd < File : la commande Cmd recevra son entrée depuis le fichier File.

(cid:1) << mot : lire depuis l’entrée standard jusqu’à ce que l’user tape la chaine

« mot ».

M.Nasri

Page 2

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

3- Expressions régulières

(cid:1) Les expressions régulières servent à représenter une chaine de caractère.

(cid:1) Caractère ou groupe de caractère :

(cid:1) c : le caractère c si ce n'est pas un méta- caractère.

o \c : le caractère littéral c dans le cas d'un méta-caractère.

o

. un caractère, n'importe lequel (saut de ligne compris).

o M-R : la plage des caractères de M à R.

o

o

[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).

(cid:1) Caractère ou groupe de caractère : les expressions qui se trouvent avant ses

symboles se répètent de la manière suivante :

o *

o +

o ?

o \{n\}

o \{n,\}

o \{,m\}

o \{n,m\}

(cid:1) Position :

o ^

o $

o \<

o \>

(cid:1) Groupement :

: 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.

: se répète exactement n fois

: se répète n fois ou plus.

: se répète au plus m fois.

Publicité

: se répète n fois au moins et m fois au plus.

: début de ligne

: fin de ligne

: début de mot

: fin de mot

o exp1 exp2 : exp1 et puis exp2.

o exp1 | exp2 : exp1 ou exp2.

o (exp) : groupe le contenu de l’expression exp et la marque.

o \n : fait référence au résultat de la nième expression.

M.Nasri

Page 3

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

(cid:1) Exemple :

o [0-9]+ : un nombre entier qui peut commencer par un ou plusieurs

zéros.

o [^aeyuio] : un caractère qui n'est pas une voyelle.

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

o [1-9][0-9] \{3\} : un nombre entier a quatre chiffres (dont le premier

n'est pas 0).

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

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

en minuscules.

o \< loin\. : une phrase se terminant par «loin.» .

o \.$ : une ligne se terminant par un point.

o ^toto$ : toto écrit seul sur une ligne.

4- sort

(cid:1) trie ligne par ligne par ordre croissant.

(cid:1) Principales options :

o –n : tri numérique (-g pour les réels).

o –r : inverser l’ordre du tri.

o –f : ne pas différencier majuscules et minuscules.

o –t c : utiliser le caractère c comme séparateur de champs dans la ligne

(par défaut, l’éspace).

o –k fields : tri en fonction du sélecteur de champ.

(cid:1) Principes de sélection de champs (fields):

o n,n

o n

o n.m

: tri selon le nième champs.

: tri selon la fin de la ligne commençant par le nième champ n.

: tri selon la fin de la ligne commençant par le m-ième caractère

des nièmes champs.

o n1, n2 : tri selon les champs à partir du champ n1 jusqu’au champ n2.

(cid:1) Exemple :

o Soit la ligne à trier :

Toto titi ta:ta

o Si l’option –t n’est pas précisée, il y’a 3 champs :

M.Nasri

Page 4

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

« Toto »

« titi » et « ta:ta »

o Si l’option –t : est précisée, il y’aura 2 champs :

« Toto titi ta» et « ta ».

o Si l’option –k 2,2 est précisée, le tri sera fait selon le 2eme champs

(titi).

o Si l’option –k 2.2 est précisié, le tri sera fait à partir du 2ème caractère du

2ème champs (ti ta :ta).

5- uniq

(cid:1) permet de gérer les entrées multiples d’un flux trié :

(cid:1) Options :

o

: sans options, il affiche les lignes en supprimant les lignes qui se

répètent

o –u : affiche seulement les lignes uniques.

o –c : affiche le nombre d’occurrence.

o –d : affiche seulement les lignes multiples.

(cid:1) Options sur les champs :

o –f : saute les n premiers champs.

o –i : ignorer la casse (minuscules / majuscules).

(cid:1) Exemple :

(cid:1) Soit le fichier toto :

% cat toto

1

1

1

2

2

3

(cid:1) uniq toto :

1

2

Publicité

3

M.Nasri

Page 5

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

(cid:1) uniq –d toto :

1

2

(cid:1) uniq –c toto :

3 1

2 2

1 3

6- wc

(cid:1) permet de compter le nombre de lignes, de mots ou de caractères.

(cid:1) Les options :

o

: sans options équivalent –lwc.

o –l : affiche le nombre de ligne.

o –w : affiche le nombre de mots (les champs séparés par espaces).

o

-c : affiche le nombre de caractère.

(cid:1) Les options :

o Soit le fichier toto qui contient :

aaabbcc cccbbaaa

o %> wc toto

1

2

17

toto

7- Tr

(cid:1) Permet de remplacer et supprimer des caractères. La seule entrée de ce filtre

est stdin.

(cid:1) Les options de ce filtre :

o Table TableFin : remplacer les caractères contenus dans Table un à un

avec les caractères contenus dans TableFin.

o –d table : permet de supprimer tous les caractères contenus dans table.

o –s table : suppression des occurrences multiples consécutives des

caractères contenus dans table.

o –c table : inversion de table (les caractères non contenues dans table).

M.Nasri

Page 6

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

(cid:1) Table de caractères : les tables de caractères sont à donner entre crochets,

avec les facilités suivantes :

o A-F : les caractères d’A-F

o A*4 : le caractère A répété 4 fois.

o A* : autant de A qu’il faut pour atteindre la longueur de la table.

(cid:1) Exemple :

% cat toto

aaabbcc cccbbaaa

% cat toto | tr [a-c] [A-C]

AAABBCC CCCBBAAA

% cat toto | tr -d [ac]

bb bb

% cat toto | tr -s [bc]

aaabc cbaaa

% cat toto | tr [a-c] [-*]

------- --------

% cat toto | tr -dc [ac]

aaacccccaaa

8- Sed

(cid:1) sed est éditeur ligne non interactif, il lit les lignes d'un fichier une à

une (ou provenant de l'entrée standard) leur applique un certain

nombre de commandes d'édition et renvoie les lignes résultantes sur

la sortie standard. Il ne modifie pas le fichier traité, il écrit tout sur la

sortie standard.

(cid:1) Les instructions les plus directement utilisables sont :

o

la substitution :

s/expr1/expr2/g : remplace partout expr1 par expr2

o Exemple :

(cid:2) sed "s/toto/TOTO/" fichier :

M.Nasri

Page 7

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

va changer la première occurrence de la chaîne toto par

TOTO (la première chaîne toto rencontrée dans le texte

uniquement)

(cid:2) sed "s/toto/TOTO/3" fichier :

• va changer la troisième occurrence de la chaîne toto par

TOTO (la troisième chaîne toto rencontrée dans le texte

Publicité

uniquement)

(cid:2) sed "s/toto/TOTO/g" fichier :

• va changer toutes les occurrences de la chaîne toto par

TOTO (toutes les chaînes toto rencontrées sont changées

(cid:2) sed "s/toto/TOTO/p" fichier :

• en cas de remplacement, la ligne concernée est affichée sur la

sortie standard (uniquement en cas de substitution)

(cid:2) sed "s/toto/TOTO/w resultat" fichier :

• en cas de substitution la ligne en entrée est inscrite dans un

fichier résultat

(cid:2) La fonction de substitution peut évidemment être utilisée avec une

expression régulière :

sed -e "s/[Ff]raise/FRAISE/g" fichier :

Substitue toutes les chaînes Fraise ou fraise par FRAISE

(cid:1) la suppression :

(cid:2) La fonction de suppression d supprime les lignes comprises

dans un intervalle donné. La syntaxe est la suivante:

(cid:2) sed "20,30d" fichier

Cette commande va supprimer les lignes 20 à 30 du fichier

fichier. On peut utiliser les expressions régulières:

(cid:2) sed "/toto/d" fichier

Cette commande supprime les lignes contenant la chaîne toto.

Si au contraire on ne veut pas effacer les lignes contenant la

chaîne toto (toutes les autres sont supprimées), on tapera:

(cid:2) sed "/toto/!d" fichier

En fait les lignes du fichier d'entrées ne sont pas supprimées,

elles le sont au niveau de la sortie standard.

(cid:1) Sed peut lire ses commandes depuis un fichier, et cela à l’aide de l’option –f :

o sed -f fichier_commande fichier

(cid:1) Exemple :

% cat toto

aaabbcc cccbbaaa

M.Nasri

Page 8

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

% sed s/a//g toto

bbcc cccbb

=> Ici sed a remplacé le caractère a par le vide.

% cat titi

s/b/bc/g

s/c/de/g

=> Ici le fichier titi contient les commande de remplacement

de b par bv et ensuite c par de.

% sed -f titi toto

aaabdebdedede dededebdebdeaaa

9- awk

(cid:1) awk est une commande très puissante, elle est considérée comme un langage en elle

seule. Elle permet d’apporter des modifications sur un flux ou un fichier de données.

(cid:1) Passage de flux :

o awk traite le flux enregistrement par enregistrement.

o Un enregistrement correspond à une ligne.

o Chaque ligne est divisée en champs (les champs sont séparés par un

espace).

(cid:1) Structure d’un programme awk :

BEGIN ‘{actions}

critere1 {actions1}

critere2 {actions2}

...

END {actions}’

(cid:1) tous ce qui est lié à BEGIN, sera exécuté une seule fois au début, avant de

commencer à parser les enregistrements.

(cid:1) Tous ce qui est criterei {actionsi}, c’est le corps du programme.

(cid:1) Le principe ici est le suivant :

o Si une ligne (enregistrement) obéit à la critère on lui applique l’action.

o Chaque itération sera appliquée sur un enregistrement.

M.Nasri

Page 9

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

(cid:1) tous ce qui est liés à END, sera exécuté à la fin après avoir lu et exécuté les

actions sur les différents enregistrements.

(cid:1) Les variables prédéfinies :

o NR : le nombre d’enregistrements lus, il s’incrémente à chaque

passage.

o NF : le nombre de champs dans l’enregistrement courant.

o $0 : l’enregistrement complet

o $1,…$NF : les champs de 1 à NF.

o

o

o

o

o

Publicité

-FNR : nombre d’enregistrement dans le fichier courant.

-FS : séparateur de champs en entrée (par défaut « »).

-OFS : séparateur de champs en sortie (par défaut « »).

-RS : séparateur de l'enregistrement en entrée (par défaut «\n»).

-ORS : séparateur de l'enregistrement en sortie (par défaut «\n»).

o − FILEMANE : nom du fichier sur lequel on applique la modification.

o − ARGC : nombre d'arguments.

o − ARGV : tableau d'argument.

(cid:1) Les critères :

o

: si aucune critère n’est mentionnée, l’action est exécutée sur tout

l’enregistrement.

o /expression/ : La critère est vérifié si l’expression régulière est trouvée

dans l’enregistrement courant.

o La critère peut être limitée à un champ (ex $n) :

o $n ~ /expression/.

o Porte sur les variables ou des opérations sur elles, et suit la syntaxe du

C (>,<,>=,<=,==,!=,&&,||,!).

(cid:1) Programmation :

(cid:2) Structures de contrôle : syntaxe pareille au C.

if, while, do, for, break, continue, exit.

(cid:2) Entrée/Sortie

getline : passe à l'enregistrement suivant.7

print var(s) : affichage des variables.

M.Nasri

Page 10

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

printf (…): affichage formatés (idem C).

(cid:2) Traitement de chaines de caractères :

(cid:3) sub, gsub, gensub : substitution.

(cid:3)

(cid:3)

index, match : position d’un motif dans une chaine.

length : longeur d’une chaine.

(cid:3) split : découpage à partir d’un séparateur.

(cid:3) substr : extraction d’une sous chaine.

(cid:3)

tolower, toupper : changement de la casse.

(cid:1) Options :

o –f fichier : lecture du programme awk depuis un fichier.

o –F i : changement de séparateur de champs.

o –v var= val : assignation d’une valeur à une variable utilisable dans awk.

=> Exemple :

o awk 'NR % 2 == 0 {print $0}' toto

(cid:3) permet d’afficher une ligne sur 2 du fichier toto.

o

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

(cid:3) affiche la liste des comptes déclarés dans /etc/passwd.

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

(cid:3) affiche la liste des comptes commençant par a.

o awk '{ print NR }' toto

(cid:3) affiche le nombre de ligne du fichier toto.

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

$4,$1,$2,$3) }'

(cid:3)

(cid:3)

toto: 1 lignes, 2 mots, 17 caracteres

formatage de la sortie de wc.

o awk -F ":" '{ $2="" ; print $0 ; OFS = ":"}' /etc/passwd

(cid:3)

imprimer chaque ligne du fichier /etc/passwd après avoir

supprimé le second champ

o awk 'END {print NR}' /etc/passwd

(cid:3)

Imprimer le nombre total de lignes du fichier précédent :

o awk -F ":" '{print $NF}' /etc/passwd

M.Nasri

Page 11

ENSI 2010/2012

Système d’exploitation et mise en œuvre UNIX

(cid:3)

Imprimer le dernier champ de chaque ligne.

o awk 'length($0) > 75 {print $0}' /etc/passwd

(cid:3)

Imprimer les lignes qui portent plus de 75 charactères.

o awk -F ":" 'BEGIN {print "Debut du script" }

(cid:3)

Imprimer les lignes dont le 1er et 3 ème champ ne contient que

des chiffres.

M.Nasri

Page 12