Académique Documents
Professionnel Documents
Culture Documents
REDIRECTIONS-PIPES-RECHERCHES
Exécution d’une commande
• Chaque commande produit un entier, appelé code de retour, qui n'est pas affiché. On
utilise la convention suivante :
• Le code de sortie d'une commande interrompue dépend de cette commande. En général il est
non nul mais il n'y a pas de convention.
Ces codes de sortie peuvent être utilisés pour composer les commandes entre elles de façon
conditionnelle :
Exécution d’une commande
Enchainement non conditionnel des commandes (;) :
com1 ; com2
com1 est d'abord exécutée, puis, dès que com1 se termine ou est interrompue,
com2 est exécutée.
Exemple :
Exécution d’une commande
Enchainement conditionnel des commandes (&& ou ||) :
Exemples :
Les redirections entrée/sortie
Les flux standards:
Une des bases essentielles d'un système Unix / Linux est la redirection d'un flux émanant d'un
programme en direction d'un autre.
Il est possible d’envoyer (rediriger) ces différents flux vers des fichiers, d’autres
flux… c’est ce qu’on appelle la redirection des flux.
Les redirections entrée/sortie
Redirection de la sortie:
cette redirection se fait par le biais des signes ">" et " >> "
• cette redirection se fait par le biais des signes " < " et " << "
• De même, avec la commande " "cmd < fichier" le contenu du fichier "fichier"
sera utilisé en entrée de la commande "cmd". C'est-à-dire qu’au lieu de saisir
l’entrée de la commande "cmd" au clavier, elle va être lue à partir du fichier
"fichier".
Les redirections entrée/sortie
Exemple:
$ cat fichier
Bonjour
Bonsoir
Salut
$ wc –l < fichier
3
Remarque:
en apparence les commandes wc –l < fichier et wc –l fichier sont strictement identiques, mais
ce qui se passe derrière est très différent.
- Si on écrit wc –l fichier, la commande wc reçoit en entrée le nom du fichier qu'elle doit
ensuite se charger d'ouvrir pour calculer le nombre de lignes.
Remarque:
On n’est pas obligé d’utiliser le mot STOP. Ce qui compte, c'est que vous
définissiez un mot-clé qui servira à indiquer la fin de la saisie.
Les redirections entrée/sortie
Redirection d’erreur:
Toutes les commandes produisent deux flux de données différents, soit vers:
• la sortie standard : si tout va bien;
• la sortie d'erreurs : s'il y a une erreur.
Exemple:
Les redirections entrée/sortie
• Si l’on veut que les messages d’erreur d’une commande soit écrit dans un fichier
plutôt qu’affiché à l’écran, on redirige la sortie d’erreur de la commande vers un
fichier grâce à l’opérateur « 2> » comme suit :
• Commande 2> fichier
Exemple:
$ cat fichierInexistant 2>ficheErreur
$cat ficheErreur
Aucun fichier ou répertoire de ce type
Remarque :
• Il est possible de fusionner les résultats et les erreurs dans un fichier unique
commande 1> fichier 2>&1
Les redirections entrée/sortie
Le pipe ("|") (ou tube en français) est un mécanisme permettant la communication
entre plusieurs commandes.
Par exemple si nous faisons "commande 1 | commande 2", le résultat de la
commande "commande 1" va être utilisé en entrée de la commande "commande 2".Il
est possible de chaîner ce type de commande autant que l’on veut.
Exemple :
Les tube de communication(Pipes)
Les groupes de commandes :
Les groupes de commandes peuvent remplacer les commandes simples dans les
pipes; mais dans ce cas, il faudra entourer le groupe de commande avec des
accolades {}; cela permet les combinaisons les plus variées.
Exemple :
{ cmd1 && cmd2; cmd3 || cmd4; } | cmd5
ATTENTION: l'espace après { et le ; avant } sont indispensables.
L'utilisation des parenthèses () est possible et a le même effet à la différence
qu'elles invoquent un nouveau shell qui sera chargé de l'exécution des commandes.
Les métacaractères
* Remplace une chaine de caractère de taille quelconque
? Remplace un seul caractère
[ ] Remplace une liste dans une plage donnée
[!] ou [^] Inverse les définitions de la plage de caractères
Syntaxe :
Plusieurs syntaxes :
# find répertoires -atime n Dernier accès au fichier il y a n*24 heures.
# find répertoires -mtime n Fichier dont les données ont été modifiées il
y a n*24 heures.
# find répertoires -ctime n Dernière modification du statut (droit
d’accès) du fichier il y a n*24 heures.
# find répertoires -newer fichier Fichier modifié plus récemment que le
fichier indiqué.
Les préfixes sont « a » pour accès, « m » pour modification et « c » pour status et les
suffixes sont time pour une tranche de 24 heures et min pour les minutes.
La valeur numérique donnée peut être précédée des signes + ou - .
Recherche d’un fichier: Find
Exemple :
• Rechercher des objets qui ont été modifiés il y a 3 jours.
find . -mtime 3
• Rechercher les objets ayant été modifiés il y a moins de 30 minutes :
find . -mmin -30
• Rechercher les répertoires auxquels on n'a pas accédé depuis plus de 72 heures :
find . -atime +3
Recherche d’un fichier: Find
Composition d’options :
« -exec commande {} \; »
Exemple :
rechercher tous les objets s’appelant « a.out » et on appliquera la commande
d’effacement aux objets trouvés :
options :indique les options qu’on peut utiliser avec la commande grep et qui sont :
minuscules)
Par exemple, pour retrouver toutes les occurrences du verbe écrire dans un fichier
on aurait besoin d'un nombre considérable de requêtes pour chacune des formes :
écris, écrirais, écrit, écrivant, etc.
En utilisant une expression régulière comme écri[a-z]+ on peut retrouver toutes ces
formes en même temps.
Recherche d’occurrences de mots à l'intérieur de
fichier : grep
Remarque :
• Afin d’inclure dans une commande les caractères spéciaux * , +, . , ? , [ , ] , { , } qui ont un rôle dans
la syntaxe des expressions régulières, on doit les protéger avec un \ (anti- slash).
•L’équivalence du métacaractère * est .* en expression régulière.
Recherche d’occurrences de mots à l'intérieur de
fichier : grep
Autres Exemples
On cherche dans file.txt les lignes comportant uniquement des Majuscules:
grep ’^[A–Z]+$’ file.txt
On cherche les lignes contenant les mots suivant le modèle T.t.
grep "T\.t\." /etc/passwd
On cherche dans le fichier des groupes, ceux qui commencent par a ou b .. ou j
less /etc/group | grep "^[a-j]"
On veut lister les répertoires du répertoire /etc
ls –l /etc | grep "^d"
On veut compter les lignes saisies au clavier qui se termine par a
grep -c "a$"
Recherche d’occurrences de mots à l'intérieur de
fichier : grep
Remarques:
• Il existe deux types d’expression régulière : simple et étendue.
• La différence entre les deux types c’est le fait que les caractères ?, +, {, |, (, et ) perdent
leur signification spéciale dans les expression régulière simple.
• Par défaut la commande grep interprète les expressions régulières simples.
• Pour utiliser les expressions régulières étendue soit :
on utilise la commande grep avec les caractères ?, +, {, |, (, et ) précédé de
l’antislash,
soit on utilise la commande grep associée à l’option –E.
ou bien on utilise la variante egrep.
sort est une commande qui permet de trier des fichiers ou leurs contenus.
Par défaut, sort affiche l'ensemble des lignes des fichiers qu'on lui passe en paramètre
triées par ordre croissant de la table de codage des caractères
Exemple1:
Exemple 3
% cat exemple.txt % sort exemple.txt
or:100000 argent:40000
argent:40000 bois:5
bois:5 or:100000
% sort -t : -k 2 exemple.txt % sort -t : -k 2 -n exemple.txt
or:100000 bois:5
argent:40000 argent:40000
bois:5 or:100000
Tri d’un fichier : sort (en anglais sort)
Exemple 4 : trier des adresses IP
Autres options:
- f : Pour ignorer la casse.
-c: affiche un message si les lignes ne sont pas dans le bon ordre.
-o fichier: stocke le résultat du tri dans un fichier (attention sort fiche > fiche détruit fiche
avant de le trier, préférer cette option à toute redirection!),
Extraction de colonnes de fichiers : cut
Quelques options :
-c : découpage selon des positions de caractères (en anglais character )
-f : découpage selon des positions de mots (en anglais field)
-d : indique le délimiteur de mots (en anglais delimiter)
Extraction de colonnes de fichiers : cut
Exemples :
Soit le fichier company.data :
406378:Sales:Itorre:Jan
031762:Marketing:Nasium:Jim
636496:Research:Ancholie:Mel
396082:Sales:Jucacion:Ed
·extraction sur chaque ligne (constituée de mots séparés par un certain délimiteur) de
mots pris isolément :
Itorre
Nasium
Ancholie
Jucacion
406378:Itorre
031762:Nasium
636496:Ancholie
396082:Jucacion
·
Extraction de colonnes de fichiers : cut
extraction sur chaque ligne (constituée de mots séparés par un certain délimiteur) du mot
i au mot j :
Sales:Itorre:Jan
Marketing:Nasium:Jim
Research:Ancholie:Mel
Sales:Jucacion:Ed
Commande de traduction de caractères : tr
(translate)
2. On veut convertir les lettres minuscules en 4. On veut convertir les lettres t et o en lettre
lettres m:
majuscules : tr ’to’ ’m’ < exemple.txt
tr ’[a-z]’ ’[A-Z]’ < exemple.txt mmmm
TOTO cheval
CHEVAL
Commande de traduction de caractères : tr
(translate)
Autres exemples :
pour effacer tous les ``0'' du fichier /etc/passwd :
tr -d "0" < /etc/passwd
pour réduire toute suite de ``0'' à un seul ``0'' dans le fichier /etc/passwd :
tr -s "0" < /etc/passwd
pour réduire toute suite de caractères non comprise (par ordre alphabétique) entre
``a'‘ et``s'' à un seul dans le fichier /etc/passwd :
tr -cs "[a-s]" < /etc/passwd | less
Par exemple, ``root'' contient deux fois ``o'', mais ``o'' est compris entre ``a'' et ``s'',
donc ``root'' ne sera pas changé. Par contre, ``uucp'' contient deux fois ``u'', et sera donc
convertit en ``ucp''.
Elimination des lignes redondantes d’un fichier : uniq
tee fichier
La commande tee est un petit programme permettant d'enregistrer les données qu'il reçoit
dans son flux d'entrée standard dans un fichier et de les renvoyer simultanément vers son
flux de sortie standard. Elle est couramment utilisée, en conjonction avec les tubes |, pour
dupliquer un flux de données.
Exemple :
ls -l | tee result.txt
Le remplacement de texte dans un fichier peut être effectué de manière automatique, c'est-
à-dire sans avoir à ouvrir le fichier dans un éditeur, grâce à la commande sed (abréviation
de l'anglais « Stream Editor »).
Les opérations qu'elle doit effectuer sur le flux de données peuvent être spécifiées de
différentes manières, soit en fournissant un fichier script à l'aide de l'option -f, soit
directement sur la ligne de commande, avec l'option -e.
La syntaxe utilisée pour appeler sed est donc typiquement la suivante :
Où fichier est le fichier sur lequel sed doit travailler, et résultat est le fichier devant
recevoir le flux de données modifiées.
Remplacement du texte dans un fichier: sed
s/texte/remplacement/options
Exemples:
Exemples: