Comment puis-je insérer du texte à une certaine taille de colonne?


142

Je sais que je peux utiliser quelque chose comme cat test.txt | pr -w 80pour relier des lignes de 80 caractères au maximum, mais cela laisse beaucoup d'espace en haut et en bas des lignes imprimées et cela ne fonctionne pas correctement sur certains systèmes.

Quel est le meilleur moyen de forcer un fichier texte avec de longues lignes à être enveloppé à une certaine largeur?

Points bonus si vous pouvez l'empêcher de casser des mots.

Réponses:


177

Tu recherches

fold -w 80 -s text.txt
  • -w indique la largeur du texte, 80 étant la norme.
  • -s dit de casser des espaces et non des mots.

C'est la méthode standard , mais il existe d'autres systèmes qui nécessitent "-c" au lieu de "-w".


Fonctionne également sur OS X, mais le nom de fichier doit être après les arguments. Merci!
rdrey le

2
Sur une note de côté, pour bien formater les e-mails pour les réponses en texte seul, j'utilise:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani le

2
@MarcelloRomani, ne devriez-vous pas utiliser une largeur de 78 puisque vous préférez ajouter deux caractères?
Nounou

1
Hmm ... Je suppose que oui. Merci d'avoir signalé cela :)
Marcello Romani

2
Notez que foldcasse les urls, alors fmtque non.
Skippy le Grand Gourou Le

51

En plus de fold, jetez un oeil à fmt. fmtessaie de choisir intelligemment les sauts de ligne pour que le texte soit bon. Cela ne casse pas les mots longs, mais plutôt que les espaces. Il joindra également les lignes adjacentes, ce qui est bon pour la prose mais non pour les fichiers journaux ou tout autre texte formaté.


3
J'aime particulièrement fmt -t par rapport au pli
lkraav

15

1) largeur de ligne fixe assurée avec brisure de mot:

fold -w 80 <text.txt

2) largeur de ligne fixe assurée avec une rupture de mots extraordinaire (un mot n'est cassé que s'il est trop gros pour tenir dans une ligne):

fold -sw 80 <text.txt

3) largeur de ligne fixe prometteuse sans rupture de mot (si le mot est trop volumineux pour tenir dans une ligne, il reste toujours tel quel, de sorte que certaines lignes peuvent avoir une taille supérieure à celle dont vous avez besoin):

fmt -w 80 <text.txt

Réponse sous-estimée. Disponible sur la plupart des systèmes. Joli.
Merc

11

Un autre outil (moins connu) qui fait ce que vous voulez est à wrappartir de GNU Talkfilters :

wrap -w 80 < textfile

Aussi (hors sujet):

mais cela met beaucoup d'espace en haut et en bas des lignes imprimées

ajouter -tlors de l'appel prd'omettre les en-têtes / remorques:

   -t, --omit-header
          omit page headers and trailers

5

Et pour plus d'options de formatage, regardez par- http://www.nicemice.net/par/


2
Actuellement, le site Web est en panne, il y a Internet Archive et le cache de Google, mais cela montre tout de même pourquoi il est important de publier plus que des liens, vous auriez au moins pu poster les exemples de la documentation officielle.
phk

-1
fold -w 100 -s text.txt

a travaillé pour moi car j'ai besoin de scinder chaque ligne jusqu'à 100 caractères


1
Qu'est-ce que votre réponse ajoute que les autres n'ont pas fait?
Sheljohn
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.