Como quebrar o texto em um determinado tamanho de coluna?

142

Sei que posso usar algo como cat test.txt | pr -w 80quebrar linhas com 80 caracteres de largura, mas isso coloca muito espaço na parte superior e inferior das linhas impressas e não funciona em alguns sistemas

Qual é a melhor maneira de forçar um arquivo de texto com linhas longas a ser quebrado em uma determinada largura?

Pontos de bônus se você puder impedir que ele quebre palavras.

cwd
fonte

Respostas:

177

Você está procurando

fold -w 80 -s text.txt
  • -w informa a largura do texto, onde 80 é padrão.
  • -s diz para quebrar em espaços, e não em palavras.

Essa é a maneira padrão , mas existem outros sistemas que precisam de "-c" em vez de "-w".

Rainer Bendig
fonte
Também funciona no OS X, mas o nome do arquivo precisa estar após os argumentos. Obrigado!
Rdrey
2
Em uma nota lateral, para formatar bem os emails para resposta somente em texto, eu uso:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani
2
@ MarcelloRomani, você não deve usar uma largura de 78, já que está acrescentando dois caracteres?
26915 nanny
1
Hmm ... acho que sim. Obrigado por apontar que fora :)
Marcello Romani
2
Observe que foldquebra URLs, enquanto fmtnão.
Skippy le Grand Gourou
51

Além de fold, dê uma olhada fmt. fmttenta escolher as quebras de linha de maneira inteligente para fazer com que o texto fique bem Não quebra palavras longas, mas envolve apenas espaços. Ele também juntará linhas adjacentes, o que é bom para a prosa, mas ruim para os arquivos de log ou outro texto formatado.

Jonathan
fonte
3
I especialmente FMT -t comparado a dobrar
lkraav
15

1) largura fixa garantida da linha com quebra de palavras:

fold -w 80 <text.txt

2) largura fixa garantida da linha com quebra extraordinária de palavras (uma palavra só será quebrada se for muito grande para caber em uma linha):

fold -sw 80 <text.txt

3) prometer largura de linha fixa sem quebra de palavra (se a palavra for muito grande para caber em uma linha, ela ainda será deixada como está; portanto, finalmente, algumas linhas podem ter um tamanho maior do que o necessário):

fmt -w 80 <text.txt
user2683246
fonte
Resposta subestimada. Disponível na maioria dos sistemas. Agradável.
Merc
11

Outra ferramenta (menos conhecida) que faz o que você quer é wrapdo GNU Talkfilters :

wrap -w 80 < textfile

Também (fora do tópico):

mas isso coloca muito espaço na parte superior e inferior das linhas impressas

adicionar -tao invocar prpara omitir cabeçalhos / trailers:

   -t, --omit-header
          omit page headers and trailers
don_crissti
fonte
5

E para mais opções de formatação, consulte par- http://www.nicemice.net/par/

sendmoreinfo
fonte
2
Atualmente, o site está fora do ar, existe o Internet Archive e o cache do Google, mas ainda assim mostra por que é importante postar mais do que apenas links; você pode pelo menos ter postado os exemplos na documentação oficial.
Phd
-1
fold -w 100 -s text.txt

trabalhou para mim como eu preciso dividir cada linha até 100 caracteres

Swathipriya Bandar
fonte
1
O que sua resposta acrescenta que as outras não?
Sheljohn