Apprenez en lisant dans l'ordre

Pipes — Chaîner les commandes

Apprends comment un pipe passe la sortie d'une commande à la suivante, compte les lignes avec wc -l, trie avec sort, et la combinaison classique sort | uniq pour supprimer les doublons — tout en pratique dans un terminal en navigateur.

Qu'est-ce qu'un pipe — le symbole |

Le pipe | est le symbole qui passe directement la sortie d'une commande à la commande suivante en entrée.

En traitant les résultats d'une commande avec une autre, tu combines de petites commandes pour accomplir la tâche.

C'est la philosophie Unix de construire des traitements en connectant des outils à usage unique.

La sortie se déverse dans l'entrée suivante
cat fruits.txt|wc -laffiche les 3 lignespasse la sortie en entréereçoit et affichele compte 3
| passe la sortie de gauche à l'entrée de droite, en chaînant des commandes à usage unique.
echo apple > fruits.txt      # crée la ligne 1
echo banana >> fruits.txt    # ajoute
echo cherry >> fruits.txt    # ajoute
cat fruits.txt | wc -l       # compte les lignes -> 3
ls / | wc -l                 # nombre d'éléments à la racine

① Crée la ligne 1 avec echo apple > fruits.txt, puis ajoute avec echo banana >> fruits.txt et echo cherry >> fruits.txt pour faire un fichier de 3 lignes.

② Passe la sortie de cat fruits.txt à wc -l via un pipe, et confirme que le nombre de lignes s'affiche.

③ Vérifie que le nombre affiché correspond au nombre de lignes du fichier. (Lance-le correctement et une explication apparaîtra.)

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

N'importe quoi peut être connecté

Les pipes ne sont pas liés à des commandes spécifiques.

N'importe quelle commande qui produit une sortie standard et n'importe quelle commande qui accepte une entrée standard peuvent être librement connectées.

Les combinaisons sont innombrables : ls | wc -l pour compter les fichiers, cat fichier | sort pour trier, et ainsi de suite.

echo log1 > lines.txt    # crée la ligne 1
echo log2 >> lines.txt   # ajoute
echo log3 >> lines.txt   # ajoute
cat lines.txt | wc -l    # 3
ls /etc | wc -l          # nombre d'éléments dans /etc

① Crée la ligne 1 avec echo x > items.txt, puis ajoute avec echo y >> items.txt et echo z >> items.txt pour faire un fichier de 3 lignes.

② Passe la sortie de cat items.txt à sort via un pipe, et confirme que les lignes s'affichent triées alphabétiquement.

③ Ensuite passe la sortie de cat items.txt à sort, puis fais un pipe à 3 étapes en connectant le résultat à wc -l avec un pipe supplémentaire, et confirme que le nombre de lignes s'affiche.

Linux console
0 / 5 exécutée(s)
Loading Linux Terminal...
CommandeRôle dans un pipe
|Passe la sortie de gauche à l'entrée de droite
wc -lCompte les lignes reçues
sortTrie les lignes reçues alphabétiquement
uniqRéduit les lignes dupliquées adjacentes à une seule
head / tailPrend juste le début / la fin de ce qu'il reçoit

Trier — sort

sort est la commande qui trie les lignes qu'elle reçoit.

Par défaut elle trie alphabétiquement (en ordre de chaîne).

Elle peut prendre la sortie de la commande précédente via un pipe et passer le résultat trié à l'écran ou à la commande suivante.

sort ordonne les lignes alphabétiquement
cat fruits.txt|sortbanana / apple / cherrypasse la sortie en entréeapple / banana /cherry (trié)
sort trie alphabétiquement les lignes reçues via un pipe et les affiche.
echo banana > fruits.txt     # crée dans le désordre
echo apple >> fruits.txt
echo cherry >> fruits.txt
cat fruits.txt | sort        # trié en apple / banana / cherry

① Crée la ligne 1 avec echo banana > fruits.txt, puis ajoute avec echo apple >> fruits.txt et echo cherry >> fruits.txt pour faire 3 lignes dans le désordre.

② Passe la sortie de cat fruits.txt à sort via un pipe, et confirme que les lignes s'affichent triées alphabétiquement.

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

Supprimer les doublons — uniq

uniq est la commande qui réduit les lignes dupliquées consécutives à une seule.

uniq ne regarde que les lignes adjacentes, donc il ne peut pas réduire des lignes identiques qui sont loin l'une de l'autre.

Quand tu veux fiablement réduire les doublons à une seule ligne, l'approche classique est sort | uniq : rassemble d'abord les mêmes lignes côte à côte avec sort, puis connecte à uniq.

sort rassemble, uniq réduit
cat list.txtsortuniqpear / apple / pear(3 lignes)apple / pear / pear(trié)apple / pear(réduit)
sort rassemble les doublons côte à côte, et uniq réduit les dupliqués consécutifs à un seul.
echo pear > list.txt         # crée avec des doublons
echo apple >> list.txt
echo pear >> list.txt
cat list.txt | sort          # apple / pear / pear
cat list.txt | sort | uniq   # apple / pear

sort avant uniq

uniq traite comme doublons uniquement les lignes adjacentes.

Il ne peut pas réduire des lignes identiques qui sont loin l'une de l'autre, donc quand tu veux ramener les doublons à une seule ligne, trie d'abord avec sort puis connecte à uniq.

① Crée la ligne 1 avec echo pear > list.txt, puis ajoute avec echo apple >> list.txt et echo pear >> list.txt pour faire 3 lignes contenant des doublons.

② Passe la sortie de cat list.txt à sort via un pipe pour que les lignes identiques se retrouvent côte à côte.

③ Connecte ensuite cette sortie à uniq, et confirme que les doublons adjacents se réduisent à une seule ligne.

Linux console
0 / 5 exécutée(s)
Loading Linux Terminal...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Que fait le symbole pipe | ?

Question 2Qu'est-ce qui s'affiche quand tu lances cat fruits.txt | wc -l ?

Question 3Quand tu veux réduire des lignes dupliquées à une seule, quelle commande est efficace à connecter avant uniq ?