Aller au contenu
Administration Linux medium

Filtrer et transformer du texte sous Linux

9 min de lecture

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.

  • 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 sed et awk pour aller plus loin

cut découpe chaque ligne d’un fichier selon un séparateur et extrait les champs demandés.

Le fichier /etc/passwd utilise : comme séparateur. Pour extraire uniquement les noms d’utilisateurs (premier champ) :

Fenêtre de terminal
cut -d: -f1 /etc/passwd
Sortie (extrait)
root
daemon
bin
bob
  • -d: : le séparateur est :
  • -f1 : extraire le champ n°1
Fenêtre de terminal
cut -d: -f1,6 /etc/passwd
Sortie (extrait)
root:/root
bob:/home/bob

Ici on récupère le nom (champ 1) et le répertoire home (champ 6).

L’option -c extrait par position au lieu du séparateur :

Fenêtre de terminal
echo "abcdefgh" | cut -c1-4
Sortie
abcd

sort trie les lignes d’un fichier par ordre alphabétique par défaut.

Fenêtre de terminal
sort /etc/passwd

Par défaut, sort trie comme du texte (« 9 » vient après « 10 »). Pour trier correctement des nombres :

Fenêtre de terminal
sort -n fichier.txt
Fenêtre de terminal
sort -r fichier.txt

Pour trier un fichier CSV par la deuxième colonne :

Fenêtre de terminal
sort -t',' -k2 fichier.csv
  • -t',' : le séparateur est ,
  • -k2 : trier sur le champ 2

uniq supprime les lignes consécutives identiques. C’est pourquoi on l’utilise presque toujours après sort :

Fenêtre de terminal
sort fichier.txt | uniq

L’option -c affiche le nombre de répétitions devant chaque ligne :

Fenêtre de terminal
sort fichier.txt | uniq -c
Sortie
3 erreur
1 info
5 warning
Fenêtre de terminal
sort fichier.txt | uniq -d

wc (word count) compte les lignes, les mots et les caractères.

Fenêtre de terminal
wc /etc/passwd
Sortie
42 64 2456 /etc/passwd

Les trois nombres : 42 lignes, 64 mots, 2456 octets.

Fenêtre de terminal
wc -l /etc/passwd

C’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 :

Fenêtre de terminal
ls /etc | wc -l
Fenêtre de terminal
wc -w fichier.txt

tr (translate) transforme ou supprime des caractères. Il lit toujours depuis l’entrée standard (via un pipe ou une redirection).

Fenêtre de terminal
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
Sortie
hello world

L’option -d supprime toutes les occurrences du caractère indiqué :

Fenêtre de terminal
echo "prix: 42,50 €" | tr -d ' '
Sortie
prix:42,50€
Fenêtre de terminal
echo "un;deux;trois" | tr ';' ','
Sortie
un,deux,trois

diff montre les différences entre deux fichiers ligne par ligne. C’est la commande de base avant d’utiliser un outil comme Git.

Fenêtre de terminal
diff fichier1.txt fichier2.txt
Sortie
2c2
< banana
---
> banane
  • 2c2 : la ligne 2 a changé (c = changed)
  • < : contenu du premier fichier
  • > : contenu du second fichier

L’option -y affiche les deux fichiers en colonnes :

Fenêtre de terminal
diff -y fichier1.txt fichier2.txt
Fenêtre de terminal
diff -u fichier1.txt fichier2.txt
Sortie
--- fichier1.txt
+++ fichier2.txt
@@ -1,3 +1,3 @@
apple
-banana
+banane
cherry

C’est le format que vous retrouverez dans git diff.

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 :

Fenêtre de terminal
sed 's/ancien/nouveau/' fichier.txt

Cette commande remplace la première occurrence de « ancien » par « nouveau » sur chaque ligne.

Ajoutez g (global) :

Fenêtre de terminal
sed 's/ancien/nouveau/g' fichier.txt

L’option -i applique la modification dans le fichier (pas seulement à l’écran) :

Fenêtre de terminal
sed -i 's/ancien/nouveau/g' fichier.txt

Pour aller plus loin avec sed, consultez le guide dédié à sed.

awk est un outil de traitement de texte très puissant, spécialisé dans les données en colonnes. Pour débuter, retenez cette syntaxe :

Fenêtre de terminal
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.

Pour un fichier CSV séparé par : (comme /etc/passwd) :

Fenêtre de terminal
awk -F: '{print $1, $6}' /etc/passwd
Sortie (extrait)
root /root
bob /home/bob
Fenêtre de terminal
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

Cette 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.

La force de ces outils, c’est la combinaison via le pipe. Voici quelques exemples courants :

Fenêtre de terminal
cut -d: -f1 /etc/passwd | sort
Fenêtre de terminal
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -n 5
Fenêtre de terminal
grep -c "error" /var/log/syslog

Ou avec grep + wc :

Fenêtre de terminal
grep "error" /var/log/syslog | wc -l
ProblèmeCause probableSolution
cut : mauvais résultatMauvais séparateur (-d)Vérifier le séparateur réel du fichier
sort : les nombres sont mal triésTri alphabétique par défautAjouter -n pour un tri numérique
uniq ne supprime pas les doublonsLes lignes ne sont pas consécutivesPasser par sort avant uniq
tr : tr: extra operandTrop d’argumentsVérifier que les jeux de caractères sont entre quotes
sed -i : fichier corrompuSubstitution incorrecteTester sans -i d’abord, puis appliquer
diff : pas de sortieLes fichiers sont identiquesC’est normal — diff ne dit rien si tout est pareil
  • cut extrait des colonnes, sort trie, uniq déduplique, wc compte.
  • tr remplace ou supprime des caractères un par un.
  • diff compare deux fichiers — format -u pour le style Git.
  • sed et awk sont plus puissants mais s/ancien/nouveau/g et '{print $1}' suffisent pour commencer.
  • Ces commandes prennent tout leur sens quand elles sont enchaînées avec le pipe |.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

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

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn