Arquivo de teste:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmo tempor incididunt ut labore et dolore magna aliqua. Ut enim minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Se estiver usando
script.sh input.txt output.txt
sed 's/ - /--/g
s/ \{0,1\}[—–] \{0,1\}/--/g
s/…/.../g
s/\\\*/†/g
s/*/\//g
s/\\\././g' $1 |
fold -sw 72 |
sed 's/ *$//g' > $2
a saída é
------------------------------------------------------------------------ <- 72 characters
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmo
tempor incididunt ut labore et dolore magna aliqua. Ut enim minim
veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
Mas por que não isso?
------------------------------------------------------------------------ <- 72 characters
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmo
tempor incididunt ut labore et dolore magna aliqua. Ut enim minim veniam
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim
id est laborum.
Ou seja, por que a palavra veniam
foi movida da 2ª linha para a 3ª? Não há espaço suficiente para ela?
man fold
:
-s: Dobra a linha após o último caractere em branco dentro das primeiras posições da coluna de largura (ou bytes).
Eu uso fold
o fornecido com o macOS, mas se usar o GNU fold
, o arquivo de saída é o mesmo.
Porque
fold
simplesmente dobra. Ele não sabe nada sobre palavras, realmente, ele só tem aquela opção legal de quebrar em espaços. No entanto, se você olhar a saída de perto, verá que, embora ele quebre em espaços, ele ainda os mantém lá na saída. Você pode vê-los convertendo todos os espaços no final de uma linha para outro caractere, como_
:Vê aqueles
_
no final de cada linha? Esses são os espaços. Isso significa que ao lidar com essa linha:Temos estes muitos personagens:
Quando chegamos em
minim
, estamos na posição 66. Se também adicionarmosveniam
(observe o espaço depois deveniam
, o único lugar onde a ferramenta tem permissão para cortar), isso nos leva além da linha:Então o espaço depois
veniam
é o 73º caractere efold
só pode quebrar em um espaço que esteja no máximo na posição 72. É por isso que não está incluindoveniam
.Se você permitir que ele quebre em qualquer lugar, ele pode fazer isso:
Se você quiser seu segundo resultado, em vez de usar fold, use
fmt
Isso parece corresponder exatamente à saída esperada e com opções padrão.