Un tube | permet de connecter deux commandes en envoyant les
résultats de la première commande (sortie standard) en
entrée dans la seconde commande (entrée standard). Une
commande placée derrière un tube est appelée
filtre.
Les filtres, agissant sur des flots de données,
chaînés entre eux par des tubes sont au cœur de la
philosophie d'UNIX.
Essayer : $who | wc –l
Avec cette méthode, les données transitant dans le tube
sont perdues. On peut les sauvegarder en insérant une commande
tee.
Essayer : $who | tee
beurk | wc –l
Examiner le contenu de beurk.
Filtres
usuels
– La commande wc
Compte les caractères, les mots et les lignes. Trois options
permettent de ne compter seulement que les caractères (option
c), que les mots (option w) ou que les lignes (option l).
– La commande cat
Ecrit le contenu du fichier sur la sortie standard
– La commande head
Donne le début d'un fichier. head <fic>
donne les dix
premières lignes du fichier head -<n> <fic>
donne les n
premières lignes du fichier
– La commande tail
Donne la fin d'un fichier. tail <fic>
donne les
dix
dernières lignes du fichier <fic>. tail -<n> <fic>
donne
les n dernières lignes du fichier <fic>. tail +<n> <fic>
donne
la fin de <fic> à partir de la ligne n.
– La commande grep grep <motif> <fic>
recherche les lignes du fichier
<fic> contenant la
chaîne <motif>
Quelques options de la commande grep:
-c pour avoir uniquement le
nombre de lignes satisfaisantes
-i pour ne pas
différencier minuscules et majuscules
-n pour afficher les
numéros de ligne
-v pour obtenir les lignes
où le motif n'existe pas
grep peut également
utiliser les expressions
régulières : grep ‘^b’ /etc/passwd affiche
les lignes commençant par ‘b’ grep ‘csh$’ /etc/passwd
affiche les lignes finissant par ‘csh’
– La commande egrep
Le filtre egrep autorise les clés multiples ; il tend à
remplacer grep.
egrep ‘[Hh]ard|[Dd]ur’ doc* affiche les lignes contenant un des mots
Hard, hard, Dur ou dur, ceci pour tous les fichiers dont le nom
commence par doc.
– La commande sort
Trie les lignes d'un fichier selon un critère
paramétrable. sort <fic> trie les
lignes du fichier <fic>
dans l'ordre
ASCII en ne considérant que le premier champ. Par défaut,
le séparateur est la tabu1ation ou l'espace.
Quelques options sont disponibles:
-n pour un tri numérique
-f pour ne pas
différencier minuscules et majuscules
-r pour l'ordre inverse
-b pour ignorer les espaces de
tête dans les comparaisons
-d seules les lettres, chiffres
et espaces sont significatifs dans les comparaisons
On peut également faire un tri sur un autre champ que le premier
: sort +2 <fic> triera les lignes du fichier <fic> dans
l'ordre ASCII à partir des chaînes du troisième
champ. On peut également changer de séparateur de champs
avec l'option -t<x> où x est le caractère choisi
comme nouveau séparateur.
– La commande uniq
Evite la répétition de lignes adjacentes identiques. uniq <fic> compare 1es
lignes adjacentes du fichier
<fic>.Si une ligne est
identique à ses suivantes, seul un
exemplaire est fourni.
Options:
-u seules les lignes existant en
un seul exemplaire sont fournies.
-c le nombre d'occurrences de
chaque ligne est affiché.
Exercice 1 :
– Afficher une liste triée des utilisateurs connectés
avec
leur termina1 et l'heure de connexion au système.
– Afficher le nombre des utilisateurs connectés.
– Afficher le nom, le terminal et la date de connexion de l'utilisateur
connecté sur pts/0.
Exercice 2 :
On étudie ici le
fichier "/etc/passwd".
– Afficher la ligne de ce fichier qui vous concerne.
– Afficher les lignes qui correspondent aux
utilisateurs du Korn-shell ksh.
– Afficher 1e nombre d'utilisateurs du shell de
Bourne bash.
– Afficher le contenu de ce fichier trié par
ordre d'UID croissant.
Exercice 3 :
Dans votre catalogue principal, créer un fichier
référencé berliet comportant douze lignes
numérotées de 1 à 12.
Afficher les lignes 5 à 9 (bornes incluses) du fichier berliet.
Exercice 4 :
– Afficher tous les renseignements concernant le fichier le plus grand
de
votre catalogue principal.
– Afficher le nombre de sous-répertoires de votre catalogue
principal.
Exercice 5 : commande cut
Elle permet de découper des champs sélectionnés
dans chacune des lignes d'un
fichier. Avec grep (coupures horizontales) et cut (coupures
verticales), on peut donc extraire un élément
isolé d'un fichier.
Deux syntaxes sont disponibles: cut
-c<liste> <fic> cut
-f<liste> -d<car> [-s] <fic>
liste est une liste de numéros de champs (en ordre croissant)
séparés par des virgules:
1,4,7 ne seront extraites que les colonnes 1, 4 et
7.
1-3,8 pour 1,2,3,8
-5,8 pour 1,2,3,4,5,8
3- pour tous les champs à partir du
troisième
Avec l'option c, la liste spécifie les positions des
caractères
sélectionnés, par exemple -c1-15 donnera les quinze
premiers caractères
de chaque ligne.
Avec l'option f, la liste est une liste de champs
considérés par défaut
comme séparés par le caractère <tabulation>.
Par exemple -f1,7
affichera le premier et le septième champ de chaque ligne. Les
lignes
ne comportant aucun séparateur seront transmises sans
transformation
sauf si l'option s est précisée, auquel cas elles seront
supprimées.
L'option d permet de choisir le séparateur. Tout
caractère ayant une
signification spéciale pour l'interpréteur de commandes
doit être mis
entre guillemets.
1 – Afficher la liste triée des noms des utilisateurs
connectés.
2 – Afficher le nom de l'utilisateur connecté sur tty03.
3 – A partir du fichier "/etc/passwd" :
Afficher le nom des
utilisateurs du Bourne Again
Shell bash.
Afficher la liste des
utilisateurs triée par
ordre alphabétique sous le format suivant : nom UID GID
Exercice 6 : commande awk
– La commande awk
est un utilitaire de scrutation et de traitement de modèle. Il
s'agit
d'une commande très complète et assez complexe à
utiliser, on se
contentera ici d'une étude superficielle.
awk [ -Fcar ] [ prog ] <fic>
Les lignes du fichier <fic> vont être tour à tour
examinées,
chacune étant découpée en champs
séparés par des espaces ou par
<car> si l 'option F est utilisée. La chaîne
<prog>
spécifie l'action à entreprendre sur chaque ligne ; elle
doit être mise
entre apostrophes pour éviter son interprétation par le
shell.
Essayer par exemple les commandes qui suivent: date date | awk '{ print $3 $2 $6 }' date | awk '{ print $3 , $2 ",", $6
}'
A partir du fichier "/etc/passwd":
1 – Quel est le nombre d'utilisateurs membres du groupe
profs ? On affichera une phrase du type :"Il y a 12 utilisateurs
membres du groupe profs".
2
– Afficher la liste des utilisateurs triée par
ordre de GID décroissant sous le format suivant : UID nom GID.