Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Exécution de flux de textes en utilisant des filtres

Début de la boite de navigation du chapitre
Gérer des flux de textes en utilisant les filtres
Icône de la faculté
Chapitre no 3
Leçon : GNU et commandes Unix
Chap. préc. :Travailler en ligne de commande
Chap. suiv. :Gestion de base des fichiers
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « GNU et commandes Unix : Gérer des flux de textes en utilisant les filtres
Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Exécution de flux de textes en utilisant des filtres
 », n'a pu être restituée correctement ci-dessus.

Objectifs modifier

Description : Les candidats devraient être en mesure d'appliquer des filtres sur les flux texte (text streams). Ces taches incluent l'envoi de fichiers texte et de flux externes (output streams) à travers les filtres utilitaire texte (text utility filters) pour modifier ceux-ci, et utiliser les commandes standards UNIX issues des packages textutil GNU.

Fichiers, termes et commandes principaux inclus :

cat
cut
expand
fmt
head
join
nl
od
paste
pr
sed
sort
split
tac
tail
tr
unexpand
uniq
wc

Correspondance de chaîne et jokers modifier

Le joker est un mécanisme de correspondance de chaîne pour la génération de noms de fichiers. L'objectif du joker est d'accroître la productivité : Localiser les fichiers dont vous ne vous souvenez pas. Localiser les fichiers qui ont quelque chose en commun. Travailler avec un groupe de fichiers plutôt qu'individuellement.

Le shell interprète ces caractères spéciaux :

! @ # $ % ^ & * ( ) { } [ ] | \ ; ~ ' " ` ?

Les caractères utilisés pour les jokers sont :

?  *  [  ]  ~

Si vous utilisez un caractère joker, le shell va essayer de générer un fichier. Essayez la commande suivante :

echo all files *

Caractères joker spéciaux modifier

? correspond à n’importe quel caractère (une et une seule fois).
* n’importe quel caractère (zéro ou plusieurs fois)
[abcfghz] un caractère parmi le jeu indiqué 
[a-z] Un caractère dans une série
[!x-z] Pas dans cette série
~ Répertoire personnel
~utilisateur Répertoire personnel de "utilisateur"

Exemples :

? Seulement un caractère
[aA]??? Quatre caractères, en commençant par a ou A.
~toto chemin du répertoire personnel de toto
[!0-9]* Toute chaîne qui ne commence pas par un chiffre.

Que font ces commandes?

ls [a-z][A-Z]??.[uk]
ls big*
ls a???a
ls ??*

Shell et jokers modifier

Une commande shell peut être une commande simple ou complexe.

ls -l [fF]*
ls *.c | more
ls -l [a-s]* | mail `users`

La première activité du shell est d'interpréter les jokers. Seuls les jokers non protégés par des guillemets sont interprétés.

Guillemets et commentaires modifier

Guillemets modifier

Utiliser des guillemets pour que le shell n'interprète pas les caractères spéciaux et ne transforme plusieurs mots en commandes shell.

  • 'chaîne' Presque tout dans les guillemets est littéral :
echo 'Il le fait, "Pourquoi ?"'
echo 'Parce que "#@&^:-)"'
echo '$VAR='Moi

"chaîne" Comme 'chaîne' mais interprète $, \, !

echo "Que s'est-il passé ?"
echo "Je ne sais pas mais lisez cette $REPONSE"

L'antislash \ traite le caractère suivant comme littéral :

echo \$VAR=Moi
echo Que s\'est-il passé \?

Comment afficher l'antislash ?

echo \\

Commentaires modifier

Vous pouvez ajouter des commentaires sur une ligne de commande ou dans un script. Utiliser le caractère #. Un espace doit immédiatement précéder #.


Exemples :

echo $HOME # Print my Home directory
echo "### PASSED ###" # Only this part is a comment
Echo The key h#, not g was pressed.

Commandes

  • cat, tac : concaténer des fichiers et afficher le résultat sur la sortie standard.
  • head, tail : renvoyer sur la sortie standard la première (respectivement) la dernière partie des fichiers passés en argument.
  • nl : renvoyer le nombre de lignes des fichiers passés en argument.
  • wc : afficher le nombre de lignes, de mots et d’octets d’un fichier.
  • cut : supprimer une partie de chaque ligne d’un fichier.
  • tr : convertir ou éliminer des caractères.
  • expand, unexpand : convertir les tabulations en espaces et espaces en tabulations.
  • Paste : fusionner les lignes de deux fichiers.
  • join : joindre les lignes de deux fichiers dans le même champ.
  • uniq : supprimer les lignes en double dans un fichier trié.
  • split : découper un fichier en plusieurs.
  • fmt : formater simplement du texte.
  • pr : convertir des fichiers texte pour l'impression.
  • sort : trier les lignes d’un fichier texte.
  • od : archiver les fichiers en octal et autres formats.

Concaténer des fichiers Pour concaténer des fichiers, utiliser cat.

cat [options] [files...]
tac [options] [files...]

Les résultats s'affichent sur la sortie standard (stdout).

options Courantes :

-s : jamais plus d'une seule ligne blanche.
-n : nombres de lignes générées.

Exemples :

cat fichier  # Affiche fichier sur stdout.
cat chapitre* # Affiche tous les fichiers commençant par chapitre sur stdout.
cat -n -s fichier # Affiche fichier avec les numéros de ligne et les simple lignes blanches.

Pour concaténer les fichier à l’envers, utiliser tac. Présente le début et la fin du fichier

Pour voir seulement quelques lignes au début ou à la fin du fichier,

head [options] [files...] # début
tail [options] [files...] # fin

Les résultats comme toujours sont affichés sur la sortie standard (stdout).

Options Courantes :

-n : nombre de ligne à afficher. (avec les commandes head et tail)
-c : nombre d'octet à afficher (head et tail)
-f : ajouter à la sortie. (tail)
-s # : itération pour chaque donnée # sec. (tail)

Exemples :

head fichier # affiche les 10 premières lignes de fichier.
head -n 2 fichier # affiche les 2 premières lignes de fichier
tail -c 10 fichier # affiche les 10 dernières lignes de fichier
tail -f -s 1 /var/log/messages

Affiche les 10 dernières lignes de messages, actualise et vérifie s'il y a de nouvelles données toutes les 10 secondes.

Numéroter les lignes Pour ajouter les numéros de lignes à un fichier nl (numbering lines).

nl [options] [files...]

Options courantes :

-i # : incrémente les numéros de ligne par #
-b : style de numérotation :
  a : numérote toutes les lignes
  t : les ligne vides
  n : aucune lignes
-n : format de numérotation :
  rz : justifier à droite
  ln : justifier à gauche

Exemples :

nl fichier # Ajoute les numéros de lignes à toutes les lignes de fichier.
nl -b t -n rz fichier # Numérote les lignes non vides au format compléter par 0 (0-completed format à l’anglo-saxonne c'est-à-dire 01-02-03-04-05...).

Compter des occurrences dans un fichier

Pour afficher le nombre de lignes, caractères, mots dans un fichier, utiliser wc (word count).

wc [options] [files...]


Options courantes :

-c : la taille en octet.
-m : le nombre de caractères.
-w : le nombre de mots (words).
-l : le nombres de lignes.
-L : Longueur de la plus longue ligne.

Exemples :

wc *.[ch] # Affiche le nombre de lignes, mots et caractères de tous les fichiers .c et .h.
wc -w fichier # Affiche le nombre de mots de fichier.

Couper des champs dans un fichier

Pour supprimer des sections de chaque ligne d’un fichier, utiliser cut (couper en anglais).

cut [options] [files...]

Options courantes :

-b # : extrait les octets à la position #.
-f # : extrait le numéro du champ #.

Exemples :

cut -b 4 fichier # Affiche le 4e octet de chaque lignes de fichier.
cut -b 4,7 fichier # Affiche les 4 et 7 èmes octets de chaque lignes de fichier.
cut -b -2,4-6, 20- fichier # Extrait les caractères 1 et 2, 4 à 6 et 20 jusqu'à la fin de chaque ligne de fichier.
cut -f 1,3 -d: /etc/passwd # Extrait le nom d’utilisateur (username) et ID de chaque ligne de /etc/passwd.

Le délimiteur par défaut est TAB mais peut être changer avec l'option -d.

Conversion de caractères modifier

Pour transposer stdin vers stdout, utiliser tr.

tr [options] JEU1 JEU2

Options courantes :

-d : supprimer les caractères dans JEU1.
-s : remplacer chaque répétition de caractère dans JEU1 par un seul.

Exemples :

tr ‘a‘ 'A'  # Transposer petit a par A.
tr ‘[A-Z]’ ‘[a-z]’ # Transposer majuscules par minuscules.
tr -d ‘ ‘ # Supprimer tous les espaces.

Pour convertir les tabulations en espaces, utiliser expand et pour convertir les espaces en tabulations, utiliser unexpand.

expand fichier
unexpand fichier

Manipulation de lignes modifier

Pour regrouper les lignes de différents fichiers, utiliser paste (coller en anglais).

paste [options] [fichiers...]

Options courantes :

-d # : délimiteur : utiliser # comme délimiteur.
-s : série : coller un fichier à la fois (une ligne par fichier).

Exemples :

paste f1 f2 # Affiche les lignes de f1 suivies de celles de f2 séparées par une tabulation.
paste -d : fichier1 fichier2 # Utilise ':' comme délimiteur.

Pour fusionner les lignes des fichiers ayant un champ commun, utiliser join.

join fichier1 fichier2 

Pour supprimer les lignes dupliquées dans un fichier trié (lignes consécutives), utiliser uniq.

uniq [options] [fichiers...]

Options courantes :

-d : n'afficher que les lignes dupliquées.
-u : n'afficher que les lignes uniques.

Exemples :

uniq -cd file # Affiche les lignes dupliquées et leur nombre.

Découper des fichiers

Pour découper des gros fichiers, utiliser split.

split [options] fichier

Options courantes :

-l # : découper tous les # lignes.
-b # : découper en # octets + b pour 512 octets, k pour ko, m pour Mo.

Exemples :

split -l 25 fichier  # Découpe fichier en fichiers de 25 lignes.
split -b 512 fichier # Découpe fichier en fichiers de 512 octets.
split -b 2b fichier  # Découpe fichier en fichiers de 2 × 512 octets.

Formatage pour l'impression modifier

Pour formater un fichier, utiliser fmt.

fmt [options] [fichiers...]

Options courantes :

-w #: largeur de ligne maximum.

Exemples :

$ fmt -w 35 fichier # Affiche avec une largeur de 35 caractères.

Pour formater un fichier pour une imprimante, utiliser pr.

pr [options] [fichiers...]

Options courantes :

-d : interlignes doubles.

Exemples :

$ pr -d fichier # Formater fichier avec double-interlignes.

Trier les lignes de fichiers textes Pour trier les lignes d’un fichier, utiliser sort.

sort [options] fichier

Le résultat est affiché sur la sortie standard.

Options courantes :

-r : inverse
-f : ignorer la casse
-n : numérique
-o fichier : redirige la sortie vers fichier
-u : pas d'enregistrements en double
-t; : utiliser ';' comme délimiteur, à la place des espaces ou tabulations.

Exemples :

sort fichier -r
sort fichier -ro resultat

Dump de fichier binaire Pour afficher le contenu d’un fichier binaire, utiliser od.

od [options] fichier

Le résultat est affiché sur la sortie standard et commence par une adresse offset en octal.

Options courantes :

-c : chaque octet comme caractère
-x : 2-byte en hexa
-d : 2-byte en décimal
-X : 4-byte en hexa.
-D : 4-byte en décimal.

Exemples :

$ od -cx /bin/ls
0000000 177   E   L   F 001 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
       457f 464c 0101 0001 0000 0000 0000 0000
0000020 002  \0 003  \0 001  \0  \0  \0     224 004  \b   4  \0  \0  \0
       0002 0003 0001 0000 9420 0804 0034 0000
0000040   °   ²  \0  \0  \0  \0  \0  \0   4  \0      \0 006  \0   (  \0
       b2b0 0000 0000 0000 0034 0020 0006 0028
0000060 032  \0 031  \0 006  \0  \0  \0   4  \0  \0  \0   4 200 004  \b
       001a 0019 0006 0000 0034 0000 8034 0804

Exercices modifier

  1. Utilisez les caractères jokers pour lister tous les fichiers dont le nom contient ’x’ suivit de ’in’ dans le dossier /etc.
  1. Utilisez les caractères jokers pour lister tous les fichiers dont le nom commence par n’importe quel caractère entre ’a’ et ’e’, suivi d’au moins deux caractères et qui ne fini pas par un nombre.
  1. Utilisez les caractères jokers pour lister tous les fichiers dont le nom contient exactement quatre caractères ainsi que les fichiers dont le nom commence par une majuscule. N’explorez par les sous-dossiers.
  1. Utilisez les caractères jokers pour lister tous les fichiers qui contiennent ’sh’ dans le dossier /bin.
  1. Affichez votre variable d’environnement HOME précédée par la chaîne "la valeur de $HOME est : ".
  1. Affichez votre variable d’environnement SHELL encadrée par deux astérisques de chaque coté.
  1. Comment afficheriez-vous la chaîne de caractères suivantes telle-quelle avec la commande echo, en vous servant de double guillemets " et d’anti-slash \ ?
    • @ # $ % ^ & * ( ) ' " \
  1. Utilisez la commande echo pour afficher les deux chaînes suivantes :
    • C'est ce qu'il a dit !
    • 'Plus jamais ça !' a-t-il répondu.
  1. Affichez le nombre de mots dans tous les fichiers commençant par la lettre h dans le dossier /etc.
  1. Comment transféreriez-vous un fichier de 2Mo avec deux disquettes de 1,44Mo ? Comment rassembleriez-vous ces fragments en un seul fichier ?
  2. Quelle est la commande pour remplacer tous les séparateurs : dans le fichier /etc/password par le caractère # ?