Linux / Commande cat : afficher et concaténer des fichiers
cat lit des fichiers et envoie leur contenu sur la sortie standard, normalement le terminal. Avec plusieurs fichiers, il les concatène, c'est-à-dire qu'il les place à la suite dans l'ordre des arguments, sans séparateur ajouté. Une redirection permet d'enregistrer cette sortie dans un autre fichier ; le choix de cette destination est essentiel pour conserver les originaux.
Les options ci-dessous sont celles du manuel officiel de GNU cat. Vérifiez cat --help sur votre système avant d'utiliser une option particulière.
Afficher un fichier et en concaténer plusieurs
La syntaxe est cat [OPTION]... [FICHIER...]. Sans fichier, ou avec le nom -, la commande lit l'entrée standard. Pour lire un court fichier existant, donnez simplement son chemin ; -- sépare les options des noms qui pourraient commencer par un tiret.
Ce laboratoire crée deux petits fichiers dans un nouveau dossier de votre répertoire personnel :
lab=$(mktemp -d "$HOME/cat-lab.XXXXXX") || exit 1
printf 'premiere partie\n' > "$lab/partie-1.txt"
printf 'deuxieme partie\n' > "$lab/partie-2.txt"
cat -- "$lab/partie-1.txt" "$lab/partie-2.txt"
Le résultat doit comporter deux lignes, dans cet ordre :
premiere partie
deuxieme partie
Le retour à la ligne provient du contenu créé par printf. cat n'en ajoute pas automatiquement entre deux fichiers. Si la première partie se termine directement par une lettre et que la seconde commence par une autre, ces deux fragments apparaîtront sur la même ligne.
Enregistrer la sortie dans une destination distincte
Le shell interprète > avant de lancer cat. Cette redirection crée le fichier de sortie ou vide un fichier qui existe déjà. Dans le dossier de pratique, utilisez un nouveau nom qui n'est celui d'aucune entrée :
cat -- "$lab/partie-1.txt" "$lab/partie-2.txt" > "$lab/ensemble.txt"
cat -- "$lab/ensemble.txt"
Le contenu d'ensemble.txt doit correspondre aux deux lignes affichées plus haut. Ne choisissez jamais un fichier d'entrée comme destination : le shell pourrait le vider avant que cat ait l'occasion de le lire. Les originaux du laboratoire restent disponibles parce que la sortie porte un autre nom.
La redirection >> ajoute à la fin au lieu de vider la destination. Elle doit elle aussi viser un fichier distinct de l'entrée :
printf 'annexe\n' > "$lab/annexe.txt"
cat -- "$lab/annexe.txt" >> "$lab/ensemble.txt"
cat -- "$lab/ensemble.txt"
Vous devez maintenant lire les deux parties, puis une troisième ligne annexe. Une nouvelle exécution du même ajout répéterait cette ligne ; cat ne détecte pas les doublons. Pour repartir dans cet exercice, recréez ensemble.txt à partir des deux fichiers de partie avec la première commande de la section.
Afficher les numéros, tabulations et fins de ligne
| Option GNU | Affichage obtenu |
|---|---|
-n |
Numérote toutes les lignes de sortie, y compris les lignes vides. |
-b |
Numérote seulement les lignes non vides ; cette option prend le dessus sur -n. |
-s |
Réduit plusieurs lignes vides consécutives à une dans la sortie. |
-E |
Marque chaque fin de ligne par $. |
-T |
Affiche les tabulations sous la forme ^I. |
-A |
Combine l'affichage des caractères non imprimables, tabulations et fins de ligne. |
Le fichier ASCII suivant contient une tabulation et deux lignes vides. Les options changent sa présentation sur la sortie, sans changer son contenu enregistré :
printf 'alpha\tbeta\n\n\nfin\n' > "$lab/visible.txt"
cat -A -- "$lab/visible.txt"
cat -n -- "$lab/visible.txt"
cat -b -- "$lab/visible.txt"
Avec -A, la première ligne doit apparaître sous la forme alpha^Ibeta$, les deux lignes vides comme deux lignes contenant chacune $, puis fin$. -n numérote les quatre lignes ; -b ne numérote que les deux lignes contenant du texte. Ces marques et numéros font partie de la sortie transformée : ne la redirigez pas sur le fichier original si vous souhaitez seulement l'inspecter.
Sur un fichier Linux contenant des fins de ligne Windows CRLF, GNU cat -E peut montrer ^M$. Les espaces ordinaires restent des espaces avant la marque de fin ; -A n'est pas un analyseur de format. Pour un texte UTF-8, l'affichage de caractères non ASCII peut aussi devenir moins lisible avec ces options ; réservez-les au diagnostic du contenu exact recherché.
Lire l'entrée standard et terminer la saisie
Sans nom de fichier, cat attend des données sur son entrée standard. Dans un terminal, vous pouvez donc créer un mémo dans le dossier de pratique :
cat > "$lab/memo.txt"
Tapez une ligne, appuyez sur Entrée, puis terminez par Ctrl+D sur une ligne vide dans un terminal Unix habituel. Cela signale la fin de l'entrée ; vous devez retrouver l'invite du shell. Vérifiez ensuite avec cat -- "$lab/memo.txt". Le comportement exact de la touche de fin d'entrée dépend du terminal ; une session qui attend encore des données n'est pas nécessairement bloquée.
Ce mécanisme convient à un petit texte saisi en une fois. Pour corriger plusieurs lignes, un éditeur de texte offre un contrôle plus pratique. Rappelez-vous aussi que le > de cet exemple écrase un mémo existant portant le même nom.
Choisir un outil adapté au volume et au format
cat envoie le contenu sans arrêt de pagination. Pour parcourir un long journal avec recherche, utilisez la commande less. Pour inverser l'ordre des lignes, utilisez tac. Pour aligner des lignes de plusieurs fichiers en colonnes, paste effectue une autre opération que la concaténation séquentielle de cat.
Évitez d'afficher directement un fichier binaire inconnu dans le terminal : ses octets de contrôle peuvent perturber l'écran. Un outil d'identification comme file, puis un affichage hexadécimal adapté, permet d'examiner ces données de manière plus lisible. cat peut transporter des octets vers un autre fichier ou une commande, mais cela ne signifie pas que leur représentation brute convient à la lecture humaine.
Questions fréquentes
cat ajoute-t-il des lignes vides entre les fichiers ?
Non. Il transmet les données de chaque fichier dans l'ordre choisi. Les retours à la ligne doivent déjà faire partie des entrées ou être ajoutés explicitement.
Pourquoi cat attend-il sans afficher l'invite ?
Sans fichier, il lit probablement l'entrée standard. Terminez la saisie selon les règles du terminal, généralement avec Ctrl+D sur une ligne vide dans un terminal Unix.
-s supprime-t-il les lignes vides du fichier ?
Il réduit leur répétition dans la sortie seulement. Le fichier source est conservé tant qu'aucune redirection ne l'écrase.
La référence des commandes Linux par tâche présente les autres outils de lecture et de traitement.




