Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP - 4-Traitement de Données Textuelles

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 20

UNIVERSITE GASTON BERGER Licence Mathématiques Physique et

DE SAINT-LOUIS Informatique

Introduction aux systèmes


d’exploitation

TP 4 : Redirections et Traitement de données textuelles


OBJECTIFS :
A la fin de ce lab. vous devez avoir les compétences suivantes :

• Afficher le contenu d’un fichier texte avec cat et du texte echo, yes
• Savoir rediriger la sortie d’une commande vers un fichier
• Savoir manipuler les tubes Unix
• Utiliser les filtres pour manipuler la sortie avec more,less,cut, grep, wc, …
• Savoir manipuler les expressions régulières avec la commande grep

PREREQUIS :
Ce TP est accompagné d’un matériel à récupérer constitué de :

1. coreutils-8.22.tar.xz qui est téléchargeable à l’adresse


http://ftp.gnu.org/gnu/coreutils/coreutils-8.22.tar.xz
2. liste.de.mots.francais.frgut.txt qui est téléchargeable à l’adresse
http://www.pallier.org/ressources/dicofr/liste.de.mots.francais.frgut.txt

EXERCICE 1 : Affichage de texte et comptage : cat,yes,echo,wc


Les commandes de cet exercice servent à l’affichage de données ou de fichiers au format texte :

Commande echo(1) :

1. Afficher la page manuelle de la commande echo(1) et en déduire :


a. Ce qu’elle fait
b. Quelle est l’utilité l’option –e
2. Tapez les commandes suivantes :
a. echo "Hello the world"
b. echo –e "Hello \nthe \nworld\n"
3. Est-ce que ce que vous aviez trouvé sur les questions 1.a et 1.b est conforme cette sortie?

Commande cat(1)

4. Afficher la page manuelle de la commande cat(1) et en déduire


a. ce qu’elle fait
b. Quelle est l’utilité des options –n et –s
5. Utilisez la commande file pour déterminer le type des fichiers suivant :
a. /etc/hosts,
b. /etc/lsb-release
c. /etc/echo

6. Tapez les commandes suivantes :


a. cat /etc/lsb-release

b. cat –n /etc/lsb-release
c. cat –n /etc/lsb-release /etc/hosts

2/20
d. cat /bin/echo

e. cat [Touche Entrée] puis tapez Hello World [Touche Entrée]


puis Ctrl+D

7. En déduire ce que fait cat quand on lui passe en argument :


a. un fichier texte ;
b. plusieurs fichiers texte ;
c. un fichier binaire
d. du texte en ligne de commande
8. Est-ce que la commande cat peut être utilisée pour afficher le contenu d’un répertoire ?

Commandes yes et wc

3/20
9. Lisez la page manuelle de la commande wc et dites ce qu’affichent les commandes
suivantes :
a. wc –l /etc/password
b. wc –w /etc/password
c. wc –c /etc/password
d. wc /etc/password

10. Lisez la page manuelle de la commande yes et testez-la

EXERCICE 2 : Redirection d’entrées/sorties


Une commande UNIX en exécution peut être vue comme une “boîte noire” qui utilise des fichiers
logiques pour recevoir des données et en afficher. Ces fichiers logiques sont au nombre de trois:

• L’entrée standard (numéro 0) : les données lues par le programmes viennent de ce fichier (le
clavier en général),
• La sortie standard (numéro 1) : les informations « normales » à afficher sont écrits dans ce
fichier (l’écran en général)
• La sortie des erreurs (numéro 1) : vers lequel le processus écrit les erreurs à afficher (l’écran
en général)

Figure 1 Les entrées/sorties Unix (source


http://fr.wikibooks.org/wiki/Programmation_Bash/Flux_et_redirections)

Pour des raisons de commodité, il peut être nécessaire de parfois sauvegarder la sortie standard ou
des erreurs dans un fichier ou d’injecter un fichier dans l’entrée standard. La redirection consiste au
remplacement de l’un de ces fichiers par défaut par un autre fichier (sur disque).

1. Redirection de sortie standard1 >


a. Affichez la liste des fichiers dans le répertoire racine / en exécutant la commande
ls /

1
Le caractère supérieur

4/20
b. Redirigez la sortie standard de la commande (ce qu’elle affiche) vers un fichier
nommé /tmp/sortie_std_ls en exécutant la commande suivante :
ls / > /tmp/sortie_std_ls
c. Affichez le contenu du fichier /tmp/sortie_std_ls avec la commande cat et
comparez le son contenu avec résultat de la commande de la question 1.a.

d. En déduire ce que fait le redirecteur >


2. Redirection de sortie standard sans écrasement >>
a. Exécutez la commande ls / > /tmp/sortie_std_ls
b. Affichez le contenu du fichier /tmp/sortie_std_ls avec la commande cat
c. Refaites les questions a et b en remplaçant ls / par ls –l /
d. Le contenu du fichier de sortie /tmp/sortie_std_ls dans les deux cas (ls /
et ls –l /) et a-t—il été :
i. Ecrasé ?
ii. Concaténé à la sortie précédente ?
iii. Vidé ?
e. Refaites les questions a. b. et c. d. en remplaçant sur la question a > par >>
f. En déduire ce que fait la redirection avec >>

APPLICATION : Ecrire, à l’aide de cat et la redirection, une commande permettant de créer un


fichier contenant dans l’ordre le contenu de /etc/hosts, /etc/password,
/etc/profile.

3. Redirection de sortie des erreurs. 2>


a. Tapez la commande ls /ugb /root /var

5/20
b. Dans cette sortie est ce qu’il y a des erreurs ? Si oui lesquels ?
c. Redirigez la sortie des erreurs vers le fichier /tmp/sortie_err_ls en tapant la
commande ls /ugb /root /var 2> /tmp/sortie_err_ls

d. Affichez le contenu du fichier /tmp/sortie_err_ls et en déduire quelles


étaient les erreurs sur la commande de la question a.

APPLICATION : La commande find affiche par défaut les erreurs sur le terminal, ceci peut
noyer les résultats trouvés dans un tas d’erreurs d’accès. Ecrire, une commande permettant de
séparer les erreurs et les fichiers réellement trouvés dans la commande find / -name "syslog"

4. Redirection d’entrée <

EXERCICE 3 : Manipulation des tubes : more or less


Les tubes (pipe en anglais) sont des cas particuliers de redirection permettant de rediriger la sortie
standard d’une commande non pas vers un fichier mais vers l’entrée standard d’une autre
commande. Le tube est représenté par le caractère barre verticale | (ALTGr+6) sur les claviers
AZERTY Standard). Pour illustrer le fonctionnement des tubes vous allez utiliser les commandes
more,less et wc comme filtre.

1. Tapez les commandes suivantes qui permettent d’afficher respectivement les fichiers et les
répertoires dans le répertoire /etc
a. find /etc –type f

6/20
b. find /etc –type d

2. Le problème avec ces deux commandes c’est que l’affichage est trop rapide. Vous
allez contrôler l’affichage grâce aux tubes et aux commandes more et less.
a. More for less
i. Pour afficher la liste des fichiers dans /etc page par page tapez la
commande suivante : find /etc –type f | more

7/20
ii. Appuyez sur la touche [Entrée] pour afficher une ligne
supplémentaire
iii. Appuyez sur la touche [Barre Espace] pour afficher une page
supplémentaire
iv. Appuyez sur la touche [q] pour quitter
b. Less is more : La commande more est extrêmement limitée. Elle ne peut pas
par exemple pas remonter sur les pages ni utiliser les touches de direction…
La commande less offre ces fonctionnalités avancées
i. Pour afficher la liste des fichiers dans /etc page par page tapez la
commande suivante : find /etc –type f | less

ii. Appuyez sur la touche [Entrée] pour afficher une ligne


supplémentaire ; Appuyez sur la touche [Barre Espace] pour afficher
une page supplémentaire
iii. Appuyez sur les touches de direction ←↑↓→ pour vous déplacer
dans les directions correspondantes

8/20
iv. Appuyez sur la touche [q] pour quitter2
3. Pour une seconde application des tubes vous allez utiliser wc pour compter le
nombre de fichiers et de répertoires dans le répertoire /etc
a. Pour compter le nombre de fichiers tapez la commande suivante :

find /etc –type f | wc –l

b. Comptez le nombre de répertoires en tapant la commande suivante :

find /etc –type d | wc -l

4. Les tubes peuvent aussi être enchainés les uns à la suite des autres. Mettez des
numéros de lignes sur la sortie de la commande find puis affichez le résultat pas à
pas en tapant la commande suivante :

find /etc –type d | cat –n | less

2
Vous pouvez taper la touche H pour accéder à l’aide des commandes less ou more

9/20
APPLICATION : Ecrire une commande qui permet de compter le nombre de fichiers et de
répertoires dans votre machine. Cette commande doit être exécutée en tant que root.

EXERCICE 4 : Filtres : head, tail, cut, paste, sort,


Parmi les intérêts pratiques des tubes, il y a la possibilité de manipuler la sortie d’une commande
pour contrôler l’affichage d’une sortie trop longue, de formater la sortie d’une commande vers un
autre format sans avoir à créer une nouvelle commande. Les distributions Linux offrent un
ensemble de commandes permettant de filtrer (traiter) les sorties des commandes à l’aide des pipes.
Dans cet exercice nous allons en voir trois catégories:

head and tail :


Les commandes head et tail permettent d’afficher respectivement les premières lignes et les
dernières lignes d’un fichier

1. Affichez les messages du noyau avec la commande dmesg 3

2. Affichez les dix premières lignes de la sortie de dmesg avec la commande4

dmesg | cat –n | head

3
Si vous voulez savoir à quoi sert cette commande, jetez un coup d’œil à la page manuelle
4
La commande cat net fait qu’ajouter des numéros sur les lignes

10/20
3. Affichez les dix dernières lignes de la sortie de dmesg

dmesg | cat –n | tail

APPLICATION : Ecrire une seule commande qui permet d’afficher à la suite les 15 premières
lignes et les 20 dernières lignes de la sortie de dmesg. Ces lignes doivent être numérotées. Astuce :
le point-virgule permet de mettre deux commandes sur la même ligne.

Commandes Cut / Paste


La commande cut permet d’extraire des colonnes dans un fichier composé de champ avec un
caractère séparateur. La commande paste permet de faire le contraire : créer un fichier avec des
champs en collant les fichiers les à côté des autres.

4. Cut (couper les données en colonnes)


a. Lisez la page manuelle de la commande cut puis dites quelle est la
signification des colonnes :
i. –d
ii. –f
b. Affichez le fichier /etc/passwd en utilisant la commande cat

11/20
c. Affichez la liste des utilisateurs en extrayant la première colonne de
/etc/passwd et utilisant le séparateur deux-points « : »

cat /etc/passwd | cut –f 1 –d ’:’

d. Affichez les colonnes 1 et 7 avec la commande (option –f 1,7)

cat /etc/passwd | cut –f 1,7 –d ’:’

e. Affichez les colonnes 1 à 4 et la colonne 7 avec la commande suivante :

cat /etc/passwd | cut –f 1-4,7 –d ’:’

f. Affichez la colonne 1 ainsi que les colonnes à partir de la 5ème en tapant la


commande :

cat /etc/passwd | cut –f 1,5- –d ’:’

EXERCICE 5 : Recherche de texte avec la commande grep


La commande grep recherche des chaînes de caractères dans du texte (dans un fichier, un pipe ou
une arborescence). Lorsque la chaîne de caractères en question est trouvée, par défaut, grep

12/20
affiche la ligne correspondante. Le but de cet exercice est de pratiquer quelques options de grep.
Récupérez le package coreutils-8.22.tar.xz 5 fournit avec le TP.

1. Décompressez le package avec la commande suivante, puis entre dans le répertoire


résultante :

tar xvf coreutils-8.22.tar.xz

2. Recherchez les commandes du package sur lesquelles Richard Stallman a participé


en tant qu’auteur en cherchant dans le fichier AUTHORS les lignes qui contiennent
le mot "Stallman" dans en tapant la commande suivante :

grep "Stallman" AUTHORS

3. Remplacez dans la question précédente "Stallman" par "stallman" ? Que peut-on en


déduire par rapport à la sensibilité à la casse de la commande grep?
4. Regarder dans la page manuelle de grep le rôle de l’option –i puis utilisez le mot
"stallman" pour rechercher la liste des commandes sur lesquelles Richard Stallman
est un auteur.

5
Il est fourni en même temps que ce TP ou bien vous pourrez le télécharger ici
http://ftp.gnu.org/gnu/coreutils/coreutils-8.22.tar.xz

13/20
5. Recherchez le nom de Richard Stallman dans tous les fichiers sources en tapant la
commande suivante :

grep "Stallman" src/*

6. Utilisez l’option -l pour affichez la liste des fichiers sources contenant le nom de
Richard Stallman en tapant la commande suivante :

grep –l "Stallman" src/*

7. Utilisez l’option -n pour afficher le numéro des lignes dans les codes sources où se
trouve le nom de Richard Stallman en tapant la commande suivante :

grep –n "Stallman" src/*

14/20
8. L’option –r permet de faire une récursive sur tous les fichiers dans un répertoire
ainsi que tous ses sous-répertoires. Utilisez l’option -r pour affichez la liste des
fichiers dans le répertoire contenant le nom de Richard Stallman en tapant la
commande suivante :

grep –rl "Stallman" .

9. Testez les commandes suivantes et dites ce qu’elles font :


a. grep –rn "Stallman" src/*
b. grep –rl "Stallman" src/*
c. grep –ir "Stallman" src
d. grep –C 2 "Stallman" src/*
e. grep –c "Stallman" src/*
f. grep --help

APPLICATION :
Ecrire une seule commande qui compte le nombre de commandes dans le package coreutils qui
contiennent au moins une fois le message "Permission denied"

15/20
EXERCICE 5 : Expressions régulières et commande grep
La commande grep peut rechercher plus que des chaînes de caractères fixées comme
"Stallman", mais aussi un ensemble de chaînes de caractères partageant une propriété. Ces
propriétés sont exprimées à l’aide des expressions régulières. Une expression régulière est
une formule construite à partir de méta caractères pour définir un ensemble de texte.

Le tableau suivant présente quelques méta caractères disponibles pour grep :

Méta- Signification Exemple


caractère

. (point) Un seul caractère Exemple : battre. Décrit l’ensemble


quelconque battrea,battreb,…,battre1,battre2,…
* Répétition, zéro ou
plusieurs fois, du Exemple : ab* représente l’ensemble
caractère précédent. {a,ab,abb,abbb,...}

+ Répétition (au moins une Exemple : ab+ représente l’ensemble {


fois) du caractère ab,abb,abbb,...}
précédent.
? l’élément précédent est Exemple : ab?c représente l’ensemble {ac,abc, …}
facultatif.
^ Début de ligne. Exemple : ^a représente toutes les lignes qui
commencent par ’a’
$ Fin de ligne. Exemple : a$ représente toutes les lignes qui finissent par
’a’
[...] Un caractère parmi la [abcd] Représente l’ensemble {a,b,c,d};;
liste ou intervalle [a-z] Représente l’ensemble {a,b,c,d}
spécifiées
[^...] Un caractère qui n’est pas [^ab] Tous les caractères sauf a et b
dans l’ensemble spécifié
par la liste

Assurez-vous d’avoir le
dictionnaire français dans le fichier
6
liste.de.mots.francais.frgut.txt qui est fourni en même temps que ce TP.

1. Début de ligne ^ (chapeau ou accent circonflexe)


a. Comptez le nombre de mots français commençants par la lettre "a" en tapant
la commande suivante7 :

grep "^a" liste.de.mots.francais.frgut.txt –c

6
Récupérez le dictionnaire contenant la liste des mots français
http://www.pallier.org/ressources/dicofr/liste.de.mots.francais.frgut.txt
7
Si vous voulez voir les mots en questions enlevez le –c à la fin de la commande

16/20
b. Afficher les mots de la langue française commençant par les lettres « abc »
en tapant la commande suivante :

grep "^abc" liste.de.mots.francais.frgut.txt

2. La fin de ligne $ (dollar)


a. Comptez le nombre de mots français se terminant par les lettres "ail" en
tapant la commande suivante :

grep "ail$" liste.de.mots.francais.frgut.txt -c

b. Quels sont les mots français se terminant par les lettres "zz" ?
c. Application : quel est la commande pour afficher les lignes non vide d’un
fichier ? Indice regardez l’option –v de grep
3. Un seul caractère quelconque «.» (point)
a. Afficher les mots français de deux lettres commençant par la lettre «a » en
tapant la commande suivante :

grep -i ^a.$ liste.de.mots.francais.frgut.txt

17/20
b. Ecrire la commande qui vous permet d’afficher les mots français de trois
lettres commençant par la lettre « c » et se terminant par la lettre « n »
c. Ecrire la commande qui vous permet d’afficher tous les mots français de trois
lettres
4. Un caractère répétés plusieurs fois + (plus8) et * (étoile)
a. Affichez la liste des mots français commençant par a la lettre a suivi d’au
moins une fois la lettre b en tapant la commande suivante :

grep –E -i ^ab+ liste.de.mots.francais.frgut.txt

b. Affichez la liste des mots français commençant par a la lettre a suivi d’au
moins deux fois la lettre b en tapant la commande suivante :

grep –E -i ^abb+ liste.de.mots.francais.frgut.txt

c. Application : Combien de mots français contiennent la lettre p au moins une


fois ?
d. Affichez la liste des mots français commençant par a la lettre a suivi
éventuellement de la lettre b en tapant la commande suivante :

grep –E -i ^ab* liste.de.mots.francais.frgut.txt

8
Le méta caractère + étend une extension il est nécessaire d’utiliser l’option –E de grep

18/20
e. Que signifie l’expression régulière suivante "u.*g.*b.*" ? Exécutez le
dans une commande sur le fichier dictionnaire.
5. Ensemble de caractères [] (crochets)
a. Affichez le nombre de mots français commençant par z ou par w ou par x en
tapant la commande suivante :

grep "^[zwx]" liste.de.mots.francais.frgut.txt -c

b. Affichez le nombre de mots français commençant par z ou par w ou par x


suivi d’un des caractères l ou a ou t en tapant la commande suivante :

grep "^[zwx][lat]" liste.de.mots.francais.frgut.txt -c

EXERCICE 6 : Travail Personnel


Cet exercice est à faire à la maison par les étudiants mais obligatoire car la connaissance de ces
éléments est considérée comme acquise. Lisez ce tutoriel sur l’éditeur vi et répondez aux questions
suivantes :

1. Comment ouvre-t-on un fichier texte avec vi ?


2. Comment crée-t-on un fichier texte avec vi ?
3. Comment quitte-t-on vi ?
4. Comment ajoute-t-on un texte dans un fichier ?
5. Comment supprime-t-on un texte dans un fichier ?
6. Comment recherche-t-on un texte dans un fichier ?
7. Comment remplace –ton un fichier par un autre ?

19/20
AUTO-EVALUATION
Pour les actions de remédiation demandez à votre prof de TP ce qu’il faut faire en plus pour
acquérir les compétences que vous n’avez pas encore.

Compétence OUI NON Action de remédiation si non


Savez-vous utiliser la commande cat pour afficher le
contenu d’un fichier ?
Savez-vous afficher du texte avec la commande echo ?
Savez-vous rediriger la sortie standard d’une commande
vers un fichier ? La sortie des erreurs ?
Savez-vous utiliser les tubes pour enchainer des
traitements sur plusieurs commandes ?
Savez-vous utiliser les commandes : more et less
pour contrôler la sortie d’une commande ?
Savez-vous rechercher du texte dans un fichier avec la
commande grep ?
Savez-vous déchiffrer une expression régulière ?
Savez-vous utiliser les expressions régulières avec la
commande grep ?
Savez-vous utiliser l’éditeur de texte nano ?
Savez-vous faire une utilisation basique de vi ?

ALLER PLUS LOIN


1. http://aral.iut-rodez.fr/fr/sanchis/enseignement/bash/ar01s05.html

20/20

Vous aimerez peut-être aussi