Vous êtes sur la page 1sur 6

Institut Supérieur des Etudes Technologiques de Jendouba

Département Technologies de l’Informatique


2ème année Licence Appliquée
Atelier Système 2 (Linux)
Amir Souissi © 2017
TP N° 6
Filtres et Expressions Régulières
Objectifs

• Utiliser les commandes des filtres simples : sort, head, tail, more, tee, uniq, wc, tr, cut,
• Maitriser les expressions régulières (ou rationnelle),
• Utiliser les commandes de filtres à expressions régulières : find, grep,
• Utiliser les commandes find et grep avec –exec et xargs pour l’exécution de commandes et le passage
d’arguments,
• Effectuer des commandes complexes combinant redirection, tube et expressions régulières.

1) Les Filtres Simples

 head et tail

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

 Afficher les 5 premières, puis les 5 dernières lignes du fichier /etc/passwd.


 Afficher la 7ième ligne de ce fichier (et elle seule), en une seule ligne de commande.

 more et less

La commande more et less permettent d’afficher un fichier page par page.

 Afficher le contenu du fichier /etc/passwd page par page

 sort

La commande sort permet de trier un fichier dans l’ordre croissant ou décroissant selon nue colonne.

 Afficher les utilisateurs inscrits dans le fichier /etc/passwd dans l’ordre croissant des uid.
 tee

La commande tee écrit l’entrée standard simultanément sur la sortie standard et sur le fichier passé en paramètre.

 Écrire une commande qui affiche "Bonjour" à l’écran et en même temps crée un fichier nommé
"Salutation.txt" dont le contenu est le même message.
 uniq

La commande uniq permet de détecter les lignes en doublons successifs dans les fichiers et de les supprimer (dans
le résultat et non pas dans le fichier)

 Créer un fichier qui comporte des noms de personnes par ligne avec quelques noms en doublons.
 Afficher dans la console la liste des noms sans doublons successifs.
 Afficher le nombre d’occurrence de chaque ligne du fichier.
 Afficher uniquement les lignes qui se répètent.

Amir Souissi © 2017 TP N° 6 _ Atelier Système 2 (Linux) 1


 wc

La commande wc permet de compter le nombre de lignes, de mots ou de caractères depuis l’entrée standard ou un
fichier.
 Compter le nombre d’utilisateurs et le nombre de groupes.

 tr

La commande tr (translate) permet traiter une chaine de caractère par une autre chaine et le résultat est envoyé sur
la sortie standard. (les données à traiter sont redirigés en entrée par fichier)

 Afficher le fichier /etc/passwd en remplaçant les caractères « ,,, » par des « ... » (dans le champ
commentaire).
 Obtenir le résultat précédent page par page.
 Que font les commandes suivantes :
tr 'a,/' 'A;_' < fich1 > fich2 avec fich1 est une copie du fichier /etc/group par redirection.
tr 'a-z' 'A-Z' < fich1 | tee fich2
tr –s [:blank:] ‘\t’ < fich1 > fich2
tr –d [:digit:] < fich1 |sort | uniq > fich2

 cut

La commande cut permet d’afficher une portion de chaque ligne du fichier passé en paramètre ou à défaut de
l’entrée standard. cut présente 2 formes suivant que l'on sélectionne des colonnes de caractères ou qu'on distingue
des champs séparés par un caractère précis.

 Conserver uniquement les caractères 2 et 5 de chaque ligne du fichier.


 Conserver les caractères du premier au troisième.
 Conserver les caractères du troisième au dernier.
 Que fait la commande suivante cut –d ":" –f 1,4 /etc/group
 Afficher uniquement les login des utilisateurs inscrits dans /etc/passwd dans l’ordre décroissant.

2) Les Filtres à Expressions Régulières


 Les expressions régulière (ou rationnelle) sont des suites de caractères ordinaires ou spéciaux qui ont des
significations particulières permettant de faire des sélections.
• ^ début de ligne
• . un caractère quelconque
• $ fin de ligne
• [...] plage de caractères permis
• [^...] plage de caractères interdits
• * 0 à n fois le caractère ou regroupement de caractères précédent
• \c protection du caractère c
• \{n\} pour définir le nombre de répétition n du caractère placé devant
• \{n,\} pour définir le nombre de répétition n du caractère placé devant
• \{n,x\} entre n et x fois le caractère précédent
• \(…\) mémorisation d'une ER
• + une ou plus occurrences du caractère ou regroupement de caractères précédent
• ? 0 ou 1 occurrence du caractère ou regroupement de caractères précédent
• {n} pour définir le nombre de répétition n du caractère ou regroupement de caractères placé devant
• \{n,} au moins n fois le caractère ou regroupement de caractères précédent
• \{n,x} entre n et x fois le caractère ou regroupement de caractères précédent

Amir Souissi © 2017 TP N° 6 _ Atelier Système 2 (Linux) 2


 Le caractère d’échappement « \ »permet de ne pas interpréter le caractère suivant par le shell. (pour dire qu’il
fait partie de la syntaxe de la commande)

Exemples :

L'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractère en minuscule. [a-z] caractère
permis, [a-z]* recherche d'occurrence des lettres permises (entre 0 et plus).

L'expression ^[0-9]\{4\}$ a pour signification, du début ^ à la fin du fichier $ ,recherche les nombres [0-9] de 4
chiffres \{4\}.

Commande FIND

 La commande find permet de rechercher des fichiers et des répertoires. C’est une commande indispensable,
très puissante mais assez complexe car contient beaucoup d’options.

Syntaxe: find < répertoire de recherche> <option > <critère de recherche> <action sur le résultat trouvé>

Exemple : find / -name *.txt -print  cherche tous les fichiers qui commencent par une suite de caractères et
se terminent par .txt puis les afficher.

 Les options de find ne sont pas sur une seule lettre mais on prend le nom entier de l’option et avec un seul
tiret ( -) . (Contrairement aux autres commandes qui utilisent les doubles tirets (--)).

Remarque : pour ne pas avoir les messages d’erreurs de permissions non accordés, on utilise un sudo avant le find.

 Options :

 Option -lname : cherche dans les cibles les link (liens symboliques)
find / -lname lien* -print

 Option -iname : pour faire uen recherche à partir d’une expression rationnelle.
find / -iname "[pt]louf.txt" -print  qui commence par un p ou un t puis louf.txt

 Option -type : indique à find quel type d’objet on recherche


find /home -name fich1 -type f -print  f pour dire qu’on cherche que des fichiers. d pour les
répertoires. l pour les liens symboliques.

 Options de recherche par date :


-atime : la dernière fois où le fichier ou dossier a été accédé
-ctime : la dernière fois où il a été changé de statut (permissions, propriétaire, …)
-mtime : le temps où on a modifié son contenu.
a c m

Signification accès changement de statut modification de contenu

Exprimé en jour atime ctime mtime

Exprimé en minute amin cmin mmin

Le chiffre qui suit –atime ou –ctime ou –mtime est exprimé en nombre de jours.
find /home -atime 1 -print  tous les fichiers qui ont été accédé il y a un jour.
find /home -amin 1 -print  tous les fichiers qui ont été modifiés il y a une minute.
Pour la valeur on peut lui ajouter un + ou un -. (+1 veut dire plus d’un jour et -1 veut dire moins d’un jour)
Amir Souissi © 2017 TP N° 6 _ Atelier Système 2 (Linux) 3
 Option -newer : cherche les fichiers qui ont été modifiés après fich1.
Option -anewer : chercher tous les fichiers qui ont été accédés après fich1.
Option -cnewer : pour les fichiers changés après fich1

sudo find . -anewer fich1 -print

 Option -size : recherche par taille

Les valeurs possibles de –size sont b pour bloc c pour caractère (octet) et k pour kilooctet

find . -size 12k -print  les fichiers qui font 12 kilo octets. (+12k pour plus de 12 kilooctets,
et -12k pour moins de 12 kilooctets)

 Option -empty : cherche les fichiers qui sont vides. (taille 0)


find ~ -empty -print

 on peut combiner plusieurs critères :


find ~ -empty -name *sources* -type f -print  chercher tous les objets de type fichier qui
sont vides et dont le nom contient le mot sources.

Exécuter des commandes sur le résultat de find : l’option -exec et la commande xargs

Rappel : find < répertoire de recherche> <option > <critère de recherche> <action sur le résultat trouvé>

-exec commande

 -print est une option de commande qui permet de réaliser l’action d’affichage sur le résultat trouvé par la
recherche.
 Pour réaliser une action sur les fichiers trouvés (de copie, de suppression, …), on utilise l’option -exec suivie
de la commande à réaliser.
 Le fichier en cours sur lequel portera l’action de la commande après le –exec est repéré par les {} et elle doit
se terminer par un ; précédé par le caractère d’échappement \.

Exemple : find . -name fich* -exec rm {} \ ;  Effacer les fichiers qui commencent par fich du rep. courant.

 Pourquoi selon vous doit on précéder le ; par un backslash ?


 La solution avec –exec est lourde car elle crée un processus pour chaque fichier traité.

xargs commande

 On peut rediriger le résultat de find avec un pipe et xargs.


 La commande xargs sert à convertir l’output d’une commande en une suite d’arguments pour les envoyer à
une autre commande. Elle s’utilise après le pipe d’une commande.

find . mtime +30 -name '*~' | xargs rm

 Que fait cette commande?


 Ajouter l’option –p à xargs et commenter ?

Amir Souissi © 2017 TP N° 6 _ Atelier Système 2 (Linux) 4


Exercice A : Commande find

1. Afficher la liste des fichiers .config situés sous le répertoire /usr/include.


2. Afficher la liste des fichiers plus vieux que 3 jours situés sous votre répertoire de connexion.
3. Afficher la liste des fichiers de /usr/include dont le nom commence par a, b ou c.
4. Modifier la commande de la question précédente pour qu'au lieu d’afficher le résultat, celui-ci soit placé
dans un fichier nommé "Abc.list" de votre répertoire de connexion.
5. Chercher les fichiers .tex modifiés plus récemment que bofichier.tex, mais il y a plus de 5 jours.
6. Rechercher un fichier modifié il y a moins de 12 jours et dont la taille soit supérieure à 30 K
7. Comment chercher tous les fichiers dont les noms commençant par un «a» majuscule ou une minuscule,
suivi d'éventuellement quelques lettres ou chiffres, et se terminent par un chiffre entre 3 et 6.
8. Trouver les répertoires vides sous le répertoire personnel puis les supprimer.

Commande GREP

Une autre commande très utilisée et très pratique est la commande grep. Elle sert à faire une recherche à l’intérieur
d’un ou de plusieurs fichiers.

Pour mieux exploiter grep, il faut maitriser les expressions régulières.

Syntaxe : grep <patern en expression régulière> <où chercher>

Exemples : grep "^#" /etc/fstab  chercher toutes les lignes qui commencent par un # (les commentaires) dans
fstab.
grep "PATH" /etc/*  cherche le mot PATH dans tous les fichiers du répertoire /etc.
Remarque : Le pattern trouvé est coloré en rouge dans le résultat trouvé par grep.

Exemples : grep "print" /etc/fstab  afficher les lignes qui contiennent le mot « print »

grep "^#$" /etc/fstab  afficher les lignes avec des commentaires vides.

grep "^$" /etc/fstab  afficher les lignes vides

Attention ! Les critères de recherches sont sensibles à la casse.

 Option -i : rendre la recherche non sensible à la casse.


grep –i "Print" /etc/fstab  insensible à la casse. Un Print avec P équivaut un print avec p.

 Option –v : renverse le critère de recherche (donne l’inverse)


grep –iv "Print" /etc/fstab  affiche toutes les lignes qui ne comportent pas le mot « print »
insensible à la casse.
 Option –c : donne le nombre de lignes qui ont été trouvés (c comme count).
grep –ivc "Print" /etc/fstab  nombre de lignes qui ne comportent pas un « print » insensible à la
casse.

 Option –n : affiche en plus le numéro de la ligne trouvée.

 Option -w: cherche le mot complet correspondant au critère et non pas une partie du mot.
sudo grep –iw "Print" .  Chercher le mot print dans tous les fichiers du répertoire courant.

Amir Souissi © 2017 TP N° 6 _ Atelier Système 2 (Linux) 5


 Option -l : donne seulement le nom du fichier dans lequel on a trouvé une correspondance avec le
critère.

 Option -r : fait une recherche récursive dans tous les sous répertoires.

Remarques :

 La variante egrep utilise une syntaxe étendue d’expression régulière.


 La variante fgrep n’utilise pas d’expression régulière mais une liste de mots pour un usage plus simple.

Exercice B : commande grep

1. Trouver les lignes vides


2. Chaine contenant au minimum 3 « p »
3. Mot terminé par « age »
4. Mot terminé par « guage » ou « gage »
5. Chaine contenant « rla »
6. Lignes terminées par « ans »
7. Chaines contenant les sous-chaines « alpha » ou « exe »
8. Ligne ne commençant pas par un chiffre
9. Ligne commençant par une voyelle ou un chiffre
10. Ligne ne commençant pas par une voyelle
11. Ligne commençant ou se terminant par un chiffre
12. Les lignes sui font moins de 10 caractères.

Exercice C : Combiner find, grep, xargs et le pipe

1. Chercher les fichiers cachés (dont le nom commence par un .) dans le répertoire courant, et qui contiennent
le mot « term » pour ensuite les supprimer.
2. find ~ -type f -exec grep -il ‘term’ {} \; Que fait cette commande ? réaliser la même chose avec un
pipe.
3. Rechercher dans le répertoire courant tous les fichiers normaux (sans les répertoires, fichiers spéciaux), et
rechercher dans ces fichiers tous ceux contenant la chaîne toto.
4. Testez la commande : find . -type f | xargs grep matrice, puis la commande find . -type f | grep matrice.
Remarquez les résultats.
5. Vous chercherez dans votre répertoire «fic_C» les fichiers d'extension «.c» dans lesquels se trouvent une
ligne contenant l'instruction «if» et afficherez les lignes. Pour cela vous utiliserez 2 méthodes, une avec le
pipe et l'autre avec l'option «exec». Quelles sont les différences.
6. Rechercher tous les fichiers d'anciennes sauvegardes (qui terminent par '' ~'') qui ont été créés les 5 derniers
jours ou depuis au moins 10 jours, et supprimer ceux qui contiennent au moins un ''if''.

Amir Souissi © 2017 TP N° 6 _ Atelier Système 2 (Linux) 6

Vous aimerez peut-être aussi