Come posso avvolgere il testo con una determinata dimensione di colonna?


142

So che posso usare qualcosa di simile cat test.txt | pr -w 80per avvolgere le linee con una larghezza di 80 caratteri, ma questo mette molto spazio nella parte superiore e inferiore delle linee stampate e non funziona proprio su alcuni sistemi

Qual è il modo migliore per forzare un file di testo con linee lunghe da avvolgere ad una certa larghezza?

Punti bonus se riesci a impedirgli di infrangere le parole.

Risposte:


177

Stai cercando

fold -w 80 -s text.txt
  • -w indica la larghezza del testo, dove 80 è standard.
  • -s dice di spezzarsi negli spazi, e non a parole.

Questo è il modo standard , ma ci sono altri sistemi che richiedono "-c" invece di "-w".


Funziona anche su OS X, ma il nome file deve essere dopo args. Grazie!
rdrey,

2
Per una nota a margine, per formattare in modo ottimale le e-mail per la risposta di solo testo, utilizzo:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani,

2
@MarcelloRomani, non dovresti usare una larghezza di 78 poiché stai anteponendo due personaggi?
tata

1
Hmm ... credo di si. Grazie per averlo segnalato :)
Marcello Romani,

2
Nota che foldinterrompe gli URL, mentre fmtnon lo fa.
Skippy le Grand Gourou,

51

Inoltre fold, dai un'occhiata a fmt. fmtcerca di scegliere le interruzioni di riga in modo intelligente per far apparire bene il testo. Non rompe le parole lunghe, ma avvolge solo gli spazi. Unirà anche le linee adiacenti, il che è utile per la prosa ma per i file di registro o altro testo formattato.


3
Mi piace particolarmente fmt -t rispetto a fold
lkraav il

15

1) larghezza della linea fissa garantita con word breaking:

fold -w 80 <text.txt

2) assicurato la larghezza della linea fissa con straordinaria interruzione delle parole (una parola viene spezzata solo se è troppo grande per adattarsi a una linea):

fold -sw 80 <text.txt

3) promettente larghezza della linea fissa senza interruzione di parole (se la parola è troppo grande per adattarsi a una linea, rimane comunque così com'è, quindi alcune linee potrebbero avere dimensioni maggiori di quelle necessarie):

fmt -w 80 <text.txt

Risposta sottovalutata. Disponibile sulla maggior parte dei sistemi. Ben fatto.
Merc

11

Un altro strumento (meno noto) che fa quello che vuoi è wrapda GNU Talkfilters :

wrap -w 80 < textfile

Inoltre (fuori tema):

ma questo mette molto spazio nella parte superiore e inferiore delle linee stampate

aggiungi -tquando invochi prper omettere intestazioni / trailer:

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

5

E per ulteriori opzioni di formattazione, guarda par- http://www.nicemice.net/par/


2
Attualmente il sito web è inattivo, c'è l'archivio Internet e la cache di Google, ma questo dimostra perché è importante pubblicare più di un semplice link, potresti almeno aver pubblicato gli esempi dalla documentazione ufficiale.
phk,

-1
fold -w 100 -s text.txt

ha funzionato per me poiché ho bisogno di dividere ogni riga fino a 100 caratteri


1
Cosa aggiunge la tua risposta che gli altri non hanno fatto?
Sheljohn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.