Linux / Commande fold : couper les longues lignes à une largeur choisie

fold ajoute des retours à la ligne dans les lignes trop longues pour respecter une largeur d'affichage. La largeur par défaut est de 80 colonnes ; -w en choisit une autre et -s préfère une coupure après un blanc quand c'est possible. Il conserve les frontières de lignes existantes et affiche le résultat sans modifier l'entrée.

Contrairement à fmt et sa réorganisation de paragraphes, fold ne réunit pas les petites lignes pour reformer un paragraphe. Il convient à une présentation ponctuelle de longues lignes. Les nouveaux retours à la ligne peuvent toutefois changer le sens de données structurées : ne réutilisez pas ce résultat comme un journal ou un CSV équivalent à l'original.

Syntaxe et premier résultat observable

fold [options] [fichiers…]

Sans fichier, fold lit son entrée standard. Les exemples visent GNU fold dans Bash ; consultez man fold pour les options de votre système. Une chaîne ASCII sans espace montre directement les coupures à une largeur de 4 :

printf 'abcdefghij\n' | fold -w 4
abcd
efgh
ij

Les deux premières lignes ont quatre caractères, la dernière deux. Le saut de ligne final de l'entrée reste présent. Une largeur courte est ici un moyen d'observer le fonctionnement, pas une recommandation de présentation pour tous les textes.

Préparer un fichier et comparer 80 et 60 colonnes

Créez un répertoire d'exercice neuf et une ligne de 86 lettres ASCII :

fold_lab=$(mktemp -d "$HOME/fold-lab.XXXXXX")
cd -- "$fold_lab"
printf '%s\n' 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgh' > long-lines.txt
fold long-lines.txt

La sortie comporte une première ligne de 80 lettres, puis une ligne de 6 lettres. Pour demander une largeur de 60 :

fold -w 60 long-lines.txt

Vous obtenez une ligne de 60 lettres, puis une de 26. Pour contrôler ces longueurs sur nos données ASCII, vous pouvez utiliser awk :

fold -w 60 long-lines.txt | awk '{print length($0)}'
60
26

Cette vérification concerne des lettres ASCII qui occupent chacune une colonne et un octet. Elle ne mesure pas l'affichage d'un emoji ou d'une séquence Unicode complexe. Le fichier initial reste intact ; notez le chemin du répertoire si vous souhaitez garder l'exercice, puis quittez-le avec cd "$HOME".

Préférer un blanc avec -s sans promettre des mots intacts

Pour une phrase simple, -s choisit le dernier blanc disponible avant la limite. L'exemple rend aussi visibles les fins de ligne grâce à cat et son option d'affichage des caractères :

printf 'one two three four\n' | fold -s -w 8 | cat -A
one two $
three $
four$

Le symbole $ ajouté par cat marque la fin d'une ligne et ne fait pas partie du texte produit par fold. L'espace visible avant ce symbole dans les deux premières lignes est conservé : fold a coupé après le blanc, sans réécrire la phrase comme le ferait un outil de réorganisation des paragraphes.

Si aucun blanc n'est disponible avant la largeur maximale, fold coupe quand même la ligne :

printf 'abcdefghij\n' | fold -s -w 4

La sortie est de nouveau abcd, efgh, puis ij. -s privilégie donc une frontière de mot ; il ne garantit pas qu'un mot long restera entier. Pour un vrai fichier de prose, la forme fold -s -w 60 paragraph.txt applique la même règle à une largeur plus lisible, après avoir préparé ce fichier.

Distinguer colonnes d'affichage, caractères et octets

GNU fold compte par défaut des colonnes d'affichage. Une tabulation peut avancer de plusieurs colonnes ; un retour arrière réduit le compteur et un retour chariot le ramène au début. Le nombre d'octets du flux n'est donc pas une mesure interchangeable avec cette largeur.

L'option -b compte les octets. Sur notre exemple ASCII, elle donne le même découpage :

printf 'abcdefghij\n' | fold -b -w 4

Cette égalité sur dix lettres ne prouve pas que -b convient à du texte UTF-8. Un caractère peut occuper plusieurs octets ; une coupure entre eux peut produire des fragments qui ne constituent plus un texte UTF-8 valide. Choisissez cette option pour une contrainte d'octets, en comprenant ses effets sur les données.

Pour des caractères larges, des accents combinatoires ou des emoji, vérifiez la version du programme, la locale et l'affichage final. Les implémentations et les versions n'offrent pas toutes les mêmes options ou le même traitement des caractères multioctets. Une largeur de terminal ne garantit pas un nombre de pixels identique dans un autre éditeur.

Sauvegarder une présentation et préserver l'original

fold -w 60 long-lines.txt > long-lines-wrapped.txt
awk '{print length($0)}' long-lines-wrapped.txt
awk '{print length($0)}' long-lines.txt

Le premier contrôle affiche 60 puis 26 ; le second affiche encore 86. La copie possède de nouveaux séparateurs de lignes et n'est donc pas identique à l'entrée, même si toutes les lettres sont conservées.

Choisissez un nouveau nom qui n'écrase pas un document utile. Ne faites pas fold fichier > fichier : le shell peut vider la source avant sa lecture. Pour revenir à la présentation initiale, utilisez l'original conservé plutôt que de supprimer indistinctement tous les sauts de ligne de la copie, car certains existaient déjà avant le traitement.

Option Effet
-w N Définir la largeur de coupure, 80 colonnes par défaut.
-s Couper de préférence après le dernier blanc avant la limite.
-b Compter les octets plutôt que les colonnes d'affichage.

Le manuel officiel de GNU fold précise les unités de largeur et le comportement des options. Pour une mise en forme de paragraphes qui réunit aussi les lignes courtes, examinez plutôt fmt.