Fatmawati Achmad Zaenuri / Shutterstock

Linux fold commande apporte une sortie indisciplinée au talon. Lisez de larges morceaux de texte, des chaînes sans fin et des flux non formatés en contrôlant la largeur de la sortie. Apprendre.


Fonctionnement des lignes de texte dans le terminal Linux

Première règle du combat Linux: connaissez votre ennemi. Alors définissons-le. Qu’est-ce qu’une ligne de texte exactement? Il s’agit d’une séquence de caractères (lettres, chiffres, symboles et espaces blancs) qui se termine par un octet spécial qui signifie «commencer une nouvelle ligne». Sous Linux et Unix, le caractère de saut de ligne, également appelé saut de ligne, est utilisé comme indicateur de fin de ligne. Il s’agit d’un octet avec une valeur de 0x0a en hexadécimal et dix en décimal.

Différents systèmes d’exploitation utilisent différentes valeurs d’octets pour indiquer la fin d’une ligne. Windows utilise une séquence de deux octets. Dans les fichiers texte Windows, le caractère de nouvelle ligne est immédiatement suivi du caractère de retour chariot, qui est 0x0d en hexadécimal et treize en décimal.

Les termes «saut de ligne» et «retour chariot» remontent à la machine à écrire. La platine, le cylindre autour duquel le papier était enroulé, était montée sur un chariot mobile. Le chariot a déplacé la largeur d’un caractère vers la gauche chaque fois que vous appuyez sur une touche. Pour commencer une nouvelle ligne, vous avez poussé un levier qui a ramené le chariot à sa position d’origine, qui a fait tourner le rouleau et a déplacé le papier vers le haut de la hauteur d’une ligne. Cette action était connue comme le retour du chariot, et la rotation du cylindre (et l’avancement du papier) était connue comme un saut de ligne.

Le levier a été remplacé par une clé lorsque la machine à écrire s’est électrifiée. La clé était intitulée Retour chariot ou simplement Retour. Certains premiers ordinateurs tels que le BBC Micro utilisaient toujours le nom Return sur ce que nous appelons maintenant Enter clé.

En règle générale, vous ne pouvez pas voir les caractères de nouvelle ligne. Vous ne pouvez voir que leur effet. Le caractère de nouvelle ligne force un logiciel qui affiche ou traite du texte à commencer une nouvelle ligne.

Mais quel est le problème avec les longues lignes?

Le texte ne contenant pas ou très peu de caractères de nouvelle ligne sera trop large pour être lu confortablement dans la fenêtre du terminal. C’est ennuyeux, mais c’est faisable.

Un problème plus pernicieux est de devoir traiter des lignes d’une longueur telle qu’elles posent un problème au logiciel qui doit traiter, transmettre ou recevoir le texte. Cela peut être dû à des longueurs de mémoire tampon internes ou à d’autres aspects du logiciel que vous ne pouvez pas ajuster.

Mais il y a un correctif, appelé fold.

Premiers pas avec pli

Jetons un œil à une partie du texte qui contient de très, très longues lignes. Notez que nous ne parlons pas ici de phrases. (Bien que le texte provienne de Moby Dick d’Herman Melville, nous avons donc le meilleur des deux mondes.)

Une ligne de texte est tout, depuis le dernier caractère de nouvelle ligne (ou le début du fichier s’il s’agit de la première ligne du fichier) jusqu’au caractère de nouvelle ligne suivant, quel que soit l’intervalle. La ligne peut contenir de nombreuses phrases. Il peut s’enrouler plusieurs fois dans la fenêtre du terminal. Mais c’est encore un Célibataire ligne de texte.

Regardons le texte dans sa forme brute:

less moby-dick.txt

moins moby-dick.txt dans une fenêtre de terminal

Le texte est affiché dans less:

Moby Dick affiché en moins dans une fenêtre de terminal

Le texte s’étire d’un bord de la fenêtre à l’autre, et les retours à la ligne sont moches, et ils cassent les mots au milieu.

Nous avons une autre version du fichier avec des lignes courtes:

less short-lines-moby-dick.txt

moins de short-lines-moby-dick.txt dans une fenêtre de terminal

Les lignes de ce fichier sont beaucoup plus courtes. Chaque ligne se termine par un caractère de nouvelle ligne.

Version courte ligne de Moby Dick affichée en moins dans une fenêtre de terminal

Si nous utilisons le hexdump commande, nous pouvons regarder les valeurs d’octets dans le fichier et voir les caractères de nouvelle ligne. le -C L’option (canonique) formate la sortie pour afficher les valeurs hexadécimales dans le corps principal de l’affichage avec les équivalents de texte dans une colonne sur le côté. Nous allons diriger la sortie vers less:

hexdump -C short-lines-moby-dick.txt | less

hexdump -C short-lines-moby-dick.txt | moins dans une fenêtre de terminal

En appuyant sur la barre oblique « /« Vous entrez lessLa fonction de recherche. Tapez « 0a » et appuyez sur Enter. Les caractères de nouvelle ligne seront mis en évidence dans le texte. Vous pouvez faire défiler le fichier et voir où ils apparaissent. Si nécessaire, vous pouvez faire défiler la sortie latéralement en utilisant Left Arrow et Right Arrow clés.

Sortie de hexdump en moins dans une fenêtre de terminal avec des caractères de nouvelle ligne mis en évidence

Avoir un caractère de nouvelle ligne à la fin de chaque ligne peut être une limitation en soi. Quel que soit le programme ou la fenêtre qui affiche ce texte, les lignes ne peuvent pas s’adapter aux fenêtres dont la largeur est plus large que les lignes elles-mêmes. La longueur de ligne a été limitée par les caractères de nouvelle ligne.

Il y a donc des problèmes avec les lignes longues et les lignes courtes.

Réduire les longues lignes

le fold la commande a une option -w (largeur) qui vous permet de spécifier une nouvelle largeur maximale pour une section de texte. Nous afficherons le texte Moby Dick d’une largeur maximale de 50 caractères:

fold -w 50 moby-dick.txt

fold -w 50 moby-dick.txt dans une fenêtre de terminal

Le texte s’affiche dans la fenêtre du terminal, avec la nouvelle longueur maximale de fichier. Le fichier d’origine n’est pas modifié. Ce n’est que la sortie de fold qui est reformaté.

Sortie du pli avec le texte Moby Dick affiché à une longueur maximale de 50 caractères, dans une fenêtre de terminal

À première vue, cela semble beaucoup mieux. Mais les mots sont toujours divisés au milieu à la fin des lignes. Il est certainement plus facile à lire, mais certains des sauts de mots maladroits sont discordants.

Bien que cela ressemble à la marge droite du texte qui oscille vers l’intérieur et vers l’extérieur, toutes les longueurs de ligne sont identiques. Les lignes qui semblent être un caractère plus courtes que les autres se terminent par un caractère espace.

Fractionnement des lignes dans les espaces

Nous pouvons utiliser le -s (espaces) option pour vous assurer que les lignes ne sont divisées que sur les caractères d’espacement et qu’aucun mot n’est coupé sur deux lignes.

fold -w 50 -s moby-dick.txt

plier -w 50 -s moby-dick.txt dans une fenêtre de terminal

La sortie a maintenant une marge de droite irrégulière, mais elle est plus facile à lire. Tous les mots finissent sur les lignes sur lesquelles ils ont commencé.

Sortie de moby-dick.txt de pli -w 50 -s dans une fenêtre de terminal

Rallonger les lignes courtes

En plus de raccourcir les longues lignes, nous pouvons utiliser fold pour supprimer les longueurs de ligne imposées des lignes plus courtes.

fold -w 75 short-lines-moby-dick.txt

fold -w 75 short-lines-moby-dick.txt dans une fenêtre de terminal

Les caractères de nouvelle ligne sont supprimés et le texte passe maintenant sur ou avant la longueur maximale allouée.

Sortie d'un pli -w 75 short-lines-moby-dick.txt dans une fenêtre de terminal

Rendre les changements permanents

fold ne peut pas modifier le fichier d’origine. Si vous souhaitez conserver les modifications, vous devrez rediriger la sortie de fold dans un nouveau fichier. Nous allons rediriger la sortie dans un fichier appelé « modified-moby-dick.txt ».

fold -w 75 -s short-lines-moby-dick.txt > modified-moby-dick.txt

fold -w 75 -s short-lines-moby-dick.txt> modified-moby-dick.txt dans une fenêtre de terminal « width = » 646 « height = » 77 « onload = » pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); « onerror = » this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); « ></p>
<p>Jetons un œil à notre nouveau fichier:</p>
<pre>less modified-moby-dick.txt</pre>
<p><img decoding=

À quoi ressemble notre nouveau fichier?

moins de moby-dick.txt modifié dans une fenêtre de terminal

Le texte s’ajuste maintenant parfaitement à notre nouvelle largeur de ligne, qui est plus large que les longueurs de ligne du fichier d’origine.

Utilisation de fold with Streams

On peut utiliser fold pour reformater des flux de texte. Il ne se limite pas à travailler uniquement avec des fichiers. Voyons ce que la sortie brute de la journalctl l’outil ressemble. le -f (suivre) option affiche les entrées les plus récentes dans le systemd journal et mises à jour à mesure que de nouvelles entrées arrivent.

sudo journalctl -f

sudo journalctl -f dans une fenêtre de terminal

La sortie se termine au bord de la fenêtre du terminal.

Sortie de sudo journalctl -f dans une fenêtre de terminal

Il n’a pas l’air trop mal, mais pour des raisons de démonstration, réduisons légèrement sa largeur. Nous allons diriger la sortie de journalctl dans fold. Nous définissons la largeur maximale à 65 caractères et nous cassons les lignes sur les espaces uniquement.

sudo journalctl -f | fold -w 65 -s

sudo journalctl -f | plier -w 65 -s dans une fenêtre de terminal

L’écran semble un peu moins écrasant et un toucher plus net aussi.

Sortie de sudo journalctl -f | plier -w 65 -s dans une fenêtre de terminal


Les murs de texte plein peuvent sembler impénétrables. Ils sont rebutants et sapeurs à gérer. Lorsque vous devez voir le bois des arbres, faites appel à fold et imposer un peu d’ordre.

LEAVE A REPLY

Please enter your comment!
Please enter your name here