Existe uma ferramenta de linha de comando para inserir quebras de linha em uma cadeia longa?

16

Dado uma string longa que precisa ser exibida com largura de texto limitada, existe uma ferramenta de linha de comando em * nix que converte a string de linha única em uma string de várias linhas com cada linha não maior que um determinado texto -width?

Por exemplo, dada a seguinte string

$ MYSTRING="Call me Ishmael. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world."

Gostaria de formatar um pouco assim:

$ echo $MYSTRING | special-format-command --width=30
Call me Ishmael. Some years ag
o - never mind how long precis
ely - having little or no mone
y in my purse, and nothing par
ticular to interest me on shor
e, I thought I would sail abou
t a little and see the watery 
part of the world.
    
por Cory Klein 03.01.2013 / 23:59

4 respostas

23

Você pode tentar o comando fold :

echo "$MYSTRING" | fold -w 30
    
por 04.01.2013 / 00:06
6

Aqui está um método usando sed :

sed 's/.\{30\}/&\
/g'
    
por 04.01.2013 / 00:21
6

Todo o propósito de fmt (parte do GNU coreutils, e outras versões do IIRC foram incluídas com não-GNU * nixes, então é quase certo que já está instalado) é reformatar os parágrafos.

No entanto, existe uma ferramenta ainda melhor chamada par (para reformatador de parágrafos). Ele pode fazer tudo o que o fmt pode fazer, mas com muito mais opções para controlar o formato de saída exato.

Uma das muitas coisas legais sobre o par é que é muito inteligente lidar com o envio de e-mails (mesmo vários níveis de citações) - muito útil ... Eu tenho o meu .vimrc configurado para que o F5 envie o parágrafo atual através do par.

Se não for empacotado para sua distro (é para debian e derivados, provavelmente outros também), par pode ser encontrado em link

    
por 04.01.2013 / 02:51
2

fold -s é a resposta mais curta e melhor para sua pergunta.

No entanto, por melhores que sejam as ferramentas de uso único, em alguns casos, em geral, você deve fazer com que seu editor faça isso.

No Emacs, você pode ajustar isso do jeito que quiser. Quanto a mim, eu uso visual-line-mode (aparece como um modo Wrap minor na linha mode) porque, no caso geral, não quero quebras de linha em nenhum outro lugar além do final dos parágrafos.

Eu pensei em dizer como faço isso. Não é "o caminho", mas é um caminho; Como eu mencionei as funções e variáveis, o seu é juntá-las e automatizá-las para fazê-las funcionar para você. (Este é o Emacs, mas para qualquer editor suficientemente avançado, um post semelhante poderia ser escrito.)

Eu disse que tenho as linhas embrulhadas visualmente quando digito e nunca as quebro manualmente. Como sempre, há exceções: por exemplo, o GNUS não envia posts para a Usenet com linhas além de uma certa largura (em caracteres). Então, eu uso M-q . No Emacs, M-q executa o comando fill-paragraph . A variável fill-column controla a largura para preenchimento. Por exemplo, se eu escrever isso (em uma única linha)

This is a lot of text being written right now. The purpose is to overflow the line so I have have to line break it with M-q.

e, em seguida, use M-q, recebo

This is a lot of text being written right now. The purpose is to
overflow the line so I have have to line break it with M-q.

Com justify-current-line (duas vezes como duas linhas), você obtém

This  is a lot  of text  being written  right now.  The purpose  is to
overflow  the  line  so  I  have  have to  line  break  it  with  M-q.

Mas, eu descobri que as pessoas raramente usam fontes monoespaçadas para ver as coisas, então não fazia muito sentido usá-las (além do meu próprio prazer de ver). Se você gostar, poderá alterar fill-paragraph para preencher com e ao mesmo tempo. Você também pode fazer com que o Emacs faça isso para você, sempre que digitar: auto-fill-mode . (Achei isso estressante, mas sou eu.)

Isso pode parecer muito trabalho, e é; mas quando você terminar (com isso e mais 1000 coisas), você pode realmente gostar de trabalhar com as ferramentas se comportando exatamente como você gosta.

    
por 04.01.2013 / 11:11