Linux / Commande fmt : réorganiser les lignes d’un paragraphe

fmt réorganise les retours à la ligne d'un texte en paragraphes pour lui donner une largeur de lecture plus régulière. Il peut réunir des lignes courtes et en répartir les mots sur de nouvelles lignes. Par défaut, il affiche le résultat sans modifier le fichier d'entrée.

Utilisez-le pour de la prose simple, des notes ou un brouillon dont les coupures de ligne sont devenues gênantes. Évitez de l'appliquer sans contrôle à du code, des journaux, des données CSV ou des tableaux Markdown : leurs retours à la ligne et leurs espaces peuvent porter une signification que fmt ne connaît pas.

Préparer un texte et observer la remise en forme

fmt [options] [fichiers…]

Les exemples concernent GNU fmt dans Bash. Sans fichier, fmt lit son entrée standard ; sinon, il lit les fichiers indiqués et envoie le résultat sur la sortie standard. Consultez man fmt pour votre implémentation.

fmt_lab=$(mktemp -d "$HOME/fmt-lab.XXXXXX")
cd -- "$fmt_lab"
printf 'one two\nthree four\n\nfive six\n' > notes.txt
printf 'one two three four five six\n' > draft.txt
fmt notes.txt
one two three four

five six

Les deux premières lignes appartiennent au même paragraphe et sont réunies. La ligne vide garde la séparation avec le paragraphe suivant. Le fichier reste intact. Le répertoire d'exercice est neuf ; notez son chemin pour retrouver les sorties, puis quittez-le avec cd "$HOME".

Choisir une largeur sans couper chaque mot

Pour observer une coupure sur un texte court :

printf 'one two three four five six\n' | fmt -w 20
one two three four
five six

Les mots sont répartis entre les lignes ; fmt ne coupe pas simplement le flux tous les 20 caractères. Sur des paragraphes plus longs, les emplacements précis dépendent du texte, des options et de l'implémentation.

GNU fmt utilise par défaut une largeur de 75 et cherche initialement des lignes un peu plus courtes que la limite choisie. Pour un brouillon destiné à une lecture plus étroite :

fmt -w 60 draft.txt

Notre petit brouillon tient sur une seule ligne à cette largeur. La commande devient surtout visible sur un paragraphe plus long. Un mot isolé plus long que la largeur demandée peut rester entier :

printf 'abcdefghijklmnopqrstuvwxyz\n' | fmt -w 10

Le mot de 26 lettres reste sur une ligne. N'utilisez donc pas fmt pour garantir qu'aucune ligne ne dépassera un nombre strict d'octets ou pour couper des champs à des positions fixes. Fold répond au besoin de replier des lignes sans la même logique de réorganisation des paragraphes ; vérifiez ses options selon l'unité et le comportement recherchés.

Garder les lignes courtes séparées avec -s

fmt -s -w 20 notes.txt
one two
three four

five six

Contrairement au premier essai, les deux lignes du premier paragraphe ne sont plus réunies. -s demande de scinder les lignes qui ont besoin de l'être sans joindre les lignes courtes. Cette option conserve davantage de frontières existantes, mais n'offre pas une analyse du langage d'un fichier de code ou du format d'un tableau.

Régler les espaces et limiter les lignes concernées

GNU -u uniformise les espacements : un espace entre les mots et deux entre les phrases reconnues par fmt. Ce n'est donc pas une conversion systématique de toutes les suites de blancs en un seul espace :

printf 'one   two.   Three    four.\n' | fmt -u -w 60
one two.  Three four.

Le résultat comporte deux espaces après le premier point. Relisez la sortie si les conventions de votre texte diffèrent de cette logique. Les règles de détection des phrases et la ponctuation ne remplacent pas une correction linguistique.

-p préfixe limite le traitement aux lignes qui commencent par le préfixe indiqué, éventuellement précédé de blancs. Dans les lignes traitées, le préfixe est temporairement retiré puis remis après réorganisation. Cette option peut être utile pour des commentaires ou des citations simples, mais examinez un échantillon avant de l'appliquer à tout un document.

Enregistrer une copie et relire les différences

fmt -w 72 draft.txt > draft-formatted.txt
cat draft-formatted.txt
cat draft.txt

Dans ce petit exemple, les deux affichages restent identiques, car la ligne tient déjà à la largeur demandée. Pour constater une transformation dans un fichier de sortie avec les mêmes données, choisissez une largeur plus courte :

fmt -w 20 draft.txt > draft-narrow.txt
cat draft-narrow.txt
cat draft.txt

La copie contient les deux lignes de l'exemple à 20 caractères ; l'original garde sa ligne initiale. Choisissez une destination qui n'écrase aucun document à conserver. Ne faites pas fmt fichier > fichier, car le shell peut vider l'entrée avant sa lecture. Garder l'original permet de reprendre l'essai avec d'autres options ou de revenir au texte initial.

Option Effet
-w N Définir la largeur utilisée pour la remise en forme.
-s Ne pas réunir les lignes courtes.
-u Uniformiser les espaces entre mots et entre phrases.
-p préfixe Traiter seulement les lignes portant ce préfixe.

Contrôlez les listes, les retraits, les citations et les caractères larges dans le terminal ou l'éditeur de destination. Une largeur calculée par l'outil ne garantit pas la même apparence dans toutes les polices et tous les environnements. Le manuel officiel de GNU fmt précise les règles de paragraphes, d'espacement et de largeur.