Fatmawati Achmad Zaenuri / Shutterstock
Le 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) qui se termine par un octet spécial qui signifie «commencer une nouvelle ligne». Sous Linux et Unix, le caractère de nouvelle ligne, également appelé saut de ligne, est utilisé comme indicateur de fin de ligne. C’est un octet avec une valeur de 0x0a dans hexadécimal et dix en décimal.
Différents systèmes d’exploitation utilisent des valeurs d’octet différentes 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. Le plateau, le cylindre autour duquel le papier était enroulé, était monté sur un chariot mobile. Le chariot déplaçait 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, et qui a fait tourner le rouleau et déplacé le papier vers le haut d’une hauteur d’une ligne. Cette action était connue sous le nom de retour du chariot, et la rotation du cylindre (et l’avancement du papier) était connue sous le nom de 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 toujours utilisé le nom Return
sur ce que nous appelons maintenant le Enter
clé.
En règle générale, vous ne pouvez pas voir les caractères de nouvelle ligne. Vous ne pouvez voir que leurs fichiers. Le caractère de nouvelle ligne force le logiciel qui affiche ou traite le 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 interne ou à d’autres aspects du logiciel que vous ne pouvez pas régler.
Mais il y a une solution pour ça, appelée fold
.
Premiers pas avec pli
Jetons un coup d’œil à une partie du texte qui contient de très, très longues lignes. Notez que nous ne parlons pas de phrases ici. (Bien que le texte provienne de Moby Dick de 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 si c’est la première ligne du fichier) jusqu’au prochain caractère de nouvelle ligne, indépendamment de ce qui se trouve entre les deux. La ligne peut contenir plusieurs phrases. Il peut s’enrouler plusieurs fois dans la fenêtre du terminal. Mais c’est toujours une ligne de texte.
Regardons le texte sous sa forme brute:
less moby-dick.txt
Le texte est affiché dans less
:
Le texte s’étend d’un bord de la fenêtre à l’autre, et les retours à la ligne sont laids et ils cassent les mots au milieu.
Nous avons une autre version du fichier avec des lignes courtes:
less short-lines-moby-dick.txt
Les lignes de ce fichier sont beaucoup plus courtes. Chaque ligne se termine par un caractère de nouvelle ligne.
Si nous utilisons le hexdump
commande, nous pouvons regardez les valeurs d’octets dans le fichier et voir les caractères de nouvelle ligne. le -C
(canonique) met en forme 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 canaliser la sortie dans less
:
hexdump -C short-lines-moby-dick.txt | less
En appuyant sur la barre oblique « /
« Vous allez entrer less
la fonction de recherche de. 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 vous en avez besoin, vous pouvez faire défiler la sortie latéralement à l’aide du Left Arrow
et Right Arrow
clés.
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 d’une largeur plus large que les lignes elles-mêmes. La longueur de la 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 files d’attente
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 avec une largeur maximale de 50 caractères:
fold -w 50 moby-dick.txt
Le texte est affiché 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é.
À première vue, cela semble beaucoup mieux. Mais les mots sont toujours divisés au milieu à la fin des lignes. C’est certainement plus facile à lire, mais certaines des coupures de mots gênantes sont discordantes.
Bien qu’il semble que la marge de droite du texte oscille vers l’intérieur et l’extérieur, toutes les longueurs de ligne sont identiques. Les lignes qui semblent être un caractère plus court que les autres se terminent par un caractère espace.
Fractionnement des lignes dans les espaces
Nous pouvons utiliser le -s
(espaces) pour vous assurer que les lignes ne sont divisées que sur des caractères d’espacement et qu’aucun mot n’est coupé sur deux lignes.
fold -w 50 -s moby-dick.txt
La sortie a maintenant une marge de droite irrégulière, mais elle est plus facile à lire. Tous les mots se terminent sur les lignes sur lesquelles ils ont commencé.
Rendre les lignes courtes plus longues
En plus de raccourcir les longues lignes, nous pouvons utiliser fold
pour supprimer les longueurs de ligne forcées des lignes plus courtes.
fold -w 75 short-lines-moby-dick.txt
Les caractères de nouvelle ligne sont supprimés et le texte s’ajuste désormais sur ou avant la longueur maximale allouée.
Rendre les changements permanents
fold
impossible de modifier le fichier d’origine. Si vous souhaitez conserver les modifications, vous devrez rediriger la sortie de fold
dans un nouveau fichier. Nous redirigerons la sortie dans un fichier appelé «modified-moby-dick.txt».
fold -w 75 -s short-lines-moby-dick.txt > modified-moby-dick.txt
À quoi ressemble notre nouveau fichier?
Le texte s’enroule désormais parfaitement à notre nouvelle largeur de ligne, qui est plus large que les longueurs de ligne du fichier d’origine.
Utilisation de fold avec des flux
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 du journalctl
outil ressemble à. le -f
(suivre) affiche les dernières entrées de la systemd
journal et mises à jour à mesure que de nouvelles entrées arrivent.
sudo journalctl -f
La sortie s’enroule au bord de la fenêtre du terminal.
Cela n’a pas l’air trop mal, mais pour des raisons de démonstration, réduisons légèrement sa largeur. Nous allons canaliser la sortie de journalctl
dans fold
. Nous définissons la largeur maximale à 65 caractères et nous coupons les lignes uniquement sur les espaces.
sudo journalctl -f | fold -w 65 -s
L’écran semble un peu moins écrasant et un toucher plus soigné aussi.
Les murs de texte solide peuvent sembler impénétrables. Ils sont rebutants et minables à gérer. Lorsque vous avez besoin de voir le bois des arbres, appelez fold
et imposer un peu d’ordre.