Dada uma string longa que precisa ser exibida com largura de texto limitada, existe uma ferramenta de linha de comando no * nix que converte a string de linha única em uma string de várias linhas, com cada linha não mais do que uma largura de texto especificada?
Por exemplo, dada a seguinte sequência
$ 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."
Eu gostaria de formatar algo 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.
text-processing
Cory Klein
fonte
fonte
echo $MYSTRING | fold -w 30
, já que a-30
sintaxe não aparece na página de manual da dobra ?fmt
. A diferença entrefold
efmt
é quefold
será quebrada na largura fixa, mesmo dividindo as palavras e pode começar as linhas com espaços em branco. Emborafmt
seja agrupado próximo ou abaixo da largura, ele não dividirá palavras, as linhas não começarão com espaços em branco e as linhas curtas poderão ser unidas.fold
parece ter um comportamento semelhante aofmt
quando a-s
opção é usada.Aqui está um método usando
sed
:fonte
.\{30\}
), pela mesma string (&
), seguida por uma nova linha.Todo o objetivo de
fmt
(parte do GNU coreutils e outras versões do IIRC foram incluídas com nixes não-GNU *, portanto é quase certo que já esteja instalado) é reformatar parágrafos.No entanto, existe uma ferramenta ainda melhor chamada
par
(para reformatação de parágrafos). Ele pode fazer tudo o quefmt
pode, mas com muito mais opções para controlar o formato exato da saída.Uma das muitas coisas realmente legais
par
é que é muito inteligente lidar com citações em e-mails (mesmo em vários níveis) - muito útil ... Eu tenho meu .vimrc configurado para que pressionar F5 envie o parágrafo atual pelo par.Se não estiver empacotado para sua distribuição (é para debian e derivados, provavelmente outros também), o par pode ser encontrado em http://www.nicemice.net/par/
fonte
*nix
é apenas uma maneira de dizer "sistemas genéricos unix ou similares a unix" - data de uma época em que a palavra Unix era uma marca registrada da AT&Tfold -s
é a melhor e mais curta resposta para sua pergunta.No entanto, por mais boas que sejam essas ferramentas de uso único, em geral, você deve solicitar que seu editor faça isso.
No Emacs, você pode ajustar isso da maneira que quiser. Quanto a mim, eu uso
visual-line-mode
(aparece como umWrap
modo menor na linha de modo) porque, no caso geral, não quero quebras de linha em nenhum outro lugar além do final dos parágrafos.Pensei em dizer o que faço. Não é "o caminho", mas é um caminho; como mencionei as funções e variáveis, seu caminho é reuni-las e automatizá-las para fazê-las funcionar para você. (Este é o Emacs, mas para qualquer editor suficientemente avançado, uma postagem semelhante pode ser escrita.)
Eu disse que tenho as linhas visualmente agrupadas quando digito e nunca as quebro manualmente. Como sempre, há exceções: por exemplo, o GNUS não envia mensagens 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 comandofill-paragraph
. A variávelfill-column
controla a largura do preenchimento. Como exemplo, se eu escrever isso (em uma única linha)e depois uso o Mq, eu recebo
Com
justify-current-line
(duas vezes duas linhas), você obtémMas descobri que as pessoas raramente usam fontes monoespaçadas para visualizar as coisas, por isso não fazia muito sentido usá-las (além do meu próprio prazer visual). Se você gosta, pode ajustar
fill-paragraph
para preencher e justificar ao mesmo tempo. Você também pode ter Emacs fazer isso por você, sempre, enquanto você digita:auto-fill-mode
. (Eu achei isso estressante, mas esse sou eu.)Isso pode parecer muito trabalho, e é; mas assim que terminar (com isso e outras 1000 coisas), você poderá realmente gostar de trabalhar com as ferramentas que se comportam exatamente como você gosta.
fonte