Vous avez un fichier de log, un export CSV ou la sortie d'une commande, et vous avez besoin d'en extraire une information précise. Sous Linux, une poignée de commandes suffit : cut pour les colonnes, sort pour trier, uniq pour dédupliquer, wc pour compter, tr pour remplacer des caractères et diff pour comparer. Ce guide couvre les usages de base de chacune.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Extraire des colonnes avec
cut - Trier des lignes avec
sort - Dédupliquer avec
uniq - Compter lignes, mots et caractères avec
wc - Remplacer ou supprimer des caractères avec
tr - Comparer deux fichiers avec
diff - Découvrir
sedetawkpour aller plus loin
cut, extraire des colonnes
Section intitulée « cut, extraire des colonnes »cut découpe chaque ligne d'un fichier selon un séparateur et extrait les champs demandés. Il travaille ligne par ligne et ne réordonne jamais les champs : -f6,1 renvoie le même résultat que -f1,6. Autre limite à connaître avant de s'en servir sur un log : cut ne sait pas traiter plusieurs espaces consécutifs comme un seul séparateur, c'est le rôle d'awk.
Extraire un champ avec un séparateur
Section intitulée « Extraire un champ avec un séparateur »Le fichier /etc/passwd utilise : comme séparateur. Pour extraire uniquement les noms d'utilisateurs (premier champ) :
cut -d: -f1 /etc/passwdrootdaemonbinbob-d:: le séparateur est:-f1: extraire le champ n°1
Extraire plusieurs champs
Section intitulée « Extraire plusieurs champs »Séparez les numéros de champs par une virgule, sans espace. Les champs sortent séparés par le même caractère que celui passé à -d.
cut -d: -f1,6 /etc/passwdroot:/rootbob:/home/bobIci on récupère le nom (champ 1) et le répertoire home (champ 6).
Extraire par position de caractères
Section intitulée « Extraire par position de caractères »L'option -c extrait par position au lieu du séparateur :
echo "abcdefgh" | cut -c1-4abcdsort, trier des lignes
Section intitulée « sort, trier des lignes »sort trie les lignes d'un fichier par ordre alphabétique par défaut. Le fichier d'origine n'est pas modifié : le résultat part sur la sortie standard, à vous de le rediriger si vous voulez le conserver. L'ordre obtenu dépend de la locale du shell, ce qui explique qu'un même fichier ne se trie pas identiquement sur deux machines aux réglages différents.
sort /etc/passwdTri numérique
Section intitulée « Tri numérique »Par défaut, sort trie comme du texte (« 9 » vient après « 10 »). Pour trier correctement des nombres :
sort -n fichier.txtTri inversé
Section intitulée « Tri inversé »-r inverse l'ordre obtenu, quel qu'il soit : combiné à -n, il donne le classement décroissant sort -rn qu'on retrouve partout dans l'analyse de logs.
sort -r fichier.txtTrier sur une colonne précise
Section intitulée « Trier sur une colonne précise »Pour trier un fichier CSV par la deuxième colonne :
sort -t',' -k2 fichier.csv-t',': le séparateur est,-k2: trier sur le champ 2
uniq, supprimer les doublons
Section intitulée « uniq, supprimer les doublons »uniq supprime les lignes consécutives identiques. C'est pourquoi on l'utilise presque toujours après sort :
sort fichier.txt | uniqCompter les occurrences
Section intitulée « Compter les occurrences »L'option -c affiche le nombre de répétitions devant chaque ligne :
sort fichier.txt | uniq -c 3 erreur 1 info 5 warningAfficher uniquement les doublons
Section intitulée « Afficher uniquement les doublons »-d n'affiche que les lignes apparaissant au moins deux fois, et une seule fois chacune. L'option inverse, -u, ne garde que les lignes uniques.
sort fichier.txt | uniq -dwc, compter
Section intitulée « wc, compter »wc (word count) compte les lignes, les mots et les caractères. Sans option, il affiche les trois valeurs dans cet ordre fixe, suivies du nom du fichier. Quand il lit depuis un pipe au lieu d'un fichier, la dernière colonne disparaît puisqu'il n'y a plus de nom à afficher.
wc /etc/passwd 42 64 2456 /etc/passwdLes trois nombres : 42 lignes, 64 mots, 2456 octets.
Compter uniquement les lignes
Section intitulée « Compter uniquement les lignes »-l compte en réalité les retours à la ligne : un fichier dont la dernière ligne n'en comporte pas est donc compté à une unité près.
wc -l /etc/passwdC'est l'option la plus utilisée, par exemple pour compter le nombre d'utilisateurs du système ou le nombre de fichiers dans un répertoire :
ls /etc | wc -lCompter les mots
Section intitulée « Compter les mots »Un « mot » est ici toute suite de caractères séparée par un espace, une tabulation ou un retour à la ligne.
wc -w fichier.txttr, remplacer ou supprimer des caractères
Section intitulée « tr, remplacer ou supprimer des caractères »tr (translate) transforme ou supprime des caractères. Il lit toujours depuis l'entrée standard (via un pipe ou une redirection).
Convertir majuscules en minuscules
Section intitulée « Convertir majuscules en minuscules »tr fait correspondre les deux jeux de caractères position par position : A devient a, B devient b, et ainsi de suite. Les caractères accentués ne sont pas couverts par l'intervalle A-Z.
echo "HELLO WORLD" | tr 'A-Z' 'a-z'hello worldSupprimer des caractères
Section intitulée « Supprimer des caractères »L'option -d supprime toutes les occurrences du caractère indiqué :
echo "prix: 42,50 €" | tr -d ' 'prix:42,50€Remplacer un caractère par un autre
Section intitulée « Remplacer un caractère par un autre »tr remplace un caractère par un caractère, jamais un mot par un mot : pour cela il faut sed.
echo "un;deux;trois" | tr ';' ','un,deux,troisdiff, comparer deux fichiers
Section intitulée « diff, comparer deux fichiers »diff montre les différences entre deux fichiers ligne par ligne. C'est la commande de base avant d'utiliser un outil comme Git.
diff fichier1.txt fichier2.txt2c2< banana---> banane2c2: la ligne 2 a changé (c = changed)<: contenu du premier fichier>: contenu du second fichier
Affichage côte à côte
Section intitulée « Affichage côte à côte »L'option -y affiche les deux fichiers en colonnes :
diff -y fichier1.txt fichier2.txtAffichage unifié (style Git)
Section intitulée « Affichage unifié (style Git) »-u regroupe les différences avec trois lignes de contexte de part et d'autre, les suppressions préfixées par - et les ajouts par +.
diff -u fichier1.txt fichier2.txt--- fichier1.txt+++ fichier2.txt@@ -1,3 +1,3 @@ apple-banana+banane cherryC'est le format que vous retrouverez dans git diff.
sed, un premier aperçu
Section intitulée « sed, un premier aperçu »sed (Stream Editor) transforme du texte à la volée. C'est un outil très riche, mais pour débuter retenez cette syntaxe de remplacement :
sed 's/ancien/nouveau/' fichier.txtCette commande remplace la première occurrence de « ancien » par « nouveau » sur chaque ligne.
Remplacer toutes les occurrences
Section intitulée « Remplacer toutes les occurrences »Ajoutez g (global) :
sed 's/ancien/nouveau/g' fichier.txtModifier le fichier directement
Section intitulée « Modifier le fichier directement »L'option -i applique la modification dans le fichier (pas seulement à l'écran) :
sed -i 's/ancien/nouveau/g' fichier.txtPour aller plus loin avec sed, consultez le guide dédié à sed.
awk, un premier aperçu
Section intitulée « awk, un premier aperçu »awk est un outil de traitement de texte très puissant, spécialisé dans les données en colonnes. À la différence de cut, il découpe sur une suite d'espaces ou de tabulations, ce qui le rend utilisable directement sur la sortie de ls -l ou d'un journal système. Pour débuter, retenez cette syntaxe :
awk '{print $1}' fichier.txt$1 désigne le premier champ (colonne), $2 le deuxième, etc. Par défaut, le séparateur est l'espace ou la tabulation.
Changer le séparateur
Section intitulée « Changer le séparateur »Pour un fichier CSV séparé par : (comme /etc/passwd) :
awk -F: '{print $1, $6}' /etc/passwdroot /rootbob /home/bobFiltrer des lignes
Section intitulée « Filtrer des lignes »Ce qui précède les accolades est une condition : le bloc n'est exécuté que sur les lignes qui la satisfont.
awk -F: '$3 >= 1000 {print $1}' /etc/passwdCette commande affiche les noms d'utilisateurs dont l'UID (champ 3) est supérieur ou égal à 1000, ce sont les utilisateurs « humains ».
Pour aller plus loin avec awk, consultez le guide dédié à awk.
Combiner les commandes : exemples pratiques
Section intitulée « Combiner les commandes : exemples pratiques »La force de ces outils, c'est la combinaison via le pipe. Chaque commande y joue un rôle unique et transmet son résultat à la suivante, ce qui permet de construire un traitement complexe sans écrire de script ni de fichier intermédiaire. L'ordre est déterminant : uniq placé avant sort ne verra pas les doublons non consécutifs.
Lister les utilisateurs triés
Section intitulée « Lister les utilisateurs triés »cut isole le nom d'utilisateur, sort remet la liste dans l'ordre alphabétique que /etc/passwd ne respecte pas.
cut -d: -f1 /etc/passwd | sortLes 5 commandes les plus utilisées
Section intitulée « Les 5 commandes les plus utilisées »history numérote chaque ligne, d'où le $2 pour récupérer la commande elle-même et non son numéro.
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -n 5Compter les erreurs dans un log
Section intitulée « Compter les erreurs dans un log »grep -c compte les lignes contenant le motif, pas les occurrences : deux « error » sur une même ligne ne comptent que pour un.
grep -c "error" /var/log/syslogOu avec grep + wc :
grep "error" /var/log/syslog | wc -lDépannage
Section intitulée « Dépannage »Ces commandes échouent rarement bruyamment : le plus souvent elles renvoient un résultat, mais le mauvais. C'est ce qui rend leurs erreurs difficiles à repérer, un cut avec le mauvais séparateur produit des colonnes plausibles et pourtant fausses. Vérifiez systématiquement la sortie sur quelques lignes avec head avant d'enchaîner un traitement.
| Problème | Cause probable | Solution |
|---|---|---|
cut : mauvais résultat | Mauvais séparateur (-d) | Vérifier le séparateur réel du fichier |
sort : les nombres sont mal triés | Tri alphabétique par défaut | Ajouter -n pour un tri numérique |
uniq ne supprime pas les doublons | Les lignes ne sont pas consécutives | Passer par sort avant uniq |
tr : tr: extra operand | Trop d'arguments | Vérifier que les jeux de caractères sont entre quotes |
sed -i : fichier corrompu | Substitution incorrecte | Tester sans -i d'abord, puis appliquer |
diff : pas de sortie | Les fichiers sont identiques | C'est normal, diff ne dit rien si tout est pareil |
Mettre en pratique
Section intitulée « Mettre en pratique »Face à un vrai journal d'accès, extraire une information précise demande plus qu'un grep mot : il faut des ancres, des classes de caractères, l'inversion avec -v et le comptage avec -c. Ce lab vous confronte à un log réaliste dont vous devez tirer des faits exacts, vérifiés automatiquement.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »cutextrait des colonnes,sorttrie,uniqdéduplique,wccompte.trremplace ou supprime des caractères un par un.diffcompare deux fichiers, format-upour le style Git.sedetawksont plus puissants maiss/ancien/nouveau/get'{print $1}'suffisent pour commencer.- Ces commandes prennent tout leur sens quand elles sont enchaînées avec le pipe
|.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Archiver et compresser : Créer et extraire des archives avec tar, gzip et zip.