Você pode tentar o comando fold
:
echo "$MYSTRING" | fold -w 30
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.
Aqui está um método usando sed
:
sed 's/.\{30\}/&\
/g'
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
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.
Tags text-processing