Como usar o comando fold no Linux

Um prompt de shell em um PC Linux
Fatmawati Achmad Zaenuri / Shutterstock

O foldcomando do Linux traz resultados indisciplinados. Leia grandes pedaços de texto, strings infinitas e fluxos não formatados, controlando a largura da saída. Aprenda como.

Como as linhas de texto funcionam no terminal Linux

Primeira regra de combate do Linux: conheça seu inimigo. Então, vamos definir isso. O que exatamente é uma linha de texto? É uma sequência de caracteres – letras, números, símbolos e espaços em branco – que termina por um byte especial que significa “iniciar uma nova linha”. No Linux e no Unix, o caractere de nova linha , também chamado de alimentação de linha, é usado como indicador de fim de linha. Este é um byte com um valor de 0x0a em hexadecimal e dez em decimal.

Diferentes sistemas operacionais usam diferentes valores de byte para indicar o fim de uma linha. O Windows usa uma sequência de dois bytes. Em arquivos de texto do Windows, o caractere de nova linha é seguido imediatamente pelo caractere de retorno de carro , que é 0x0d em hexadecimal e treze em decimal.

Os termos “alimentação de linha” e “retorno de carro” datam da máquina de escrever . O cilindro, o cilindro em que o papel estava enrolado , era montado em um carro móvel. A carruagem moveu a largura de um caractere para a esquerda cada vez que você pressionou uma tecla. Para iniciar uma nova linha, você empurrou uma alavanca que trouxe o carro de volta à sua posição original e que girou o rolo e moveu o papel para cima na altura de uma linha. Essa ação era conhecida como retorno do carro e a rotação do cilindro (e o avanço do papel) era conhecido como avanço de linha.

Recomendado:  Quão anônimo é o Bitcoin?

A alavanca foi substituída por uma chave quando a máquina de escrever ficou eletrificada. A chave estava rotulada Retorno de carro ou apenas Retorno. Alguns computadores antigos, como o BBC Micro,  ainda usavam o nome Returnno que hoje chamamos de Enterchave.

Você não pode ver caracteres de nova linha, como regra. Você só pode ver seu efeito . O caractere de nova linha força o software que exibe ou processa texto a iniciar uma nova linha.

Mas qual é o problema com linhas longas?

Texto sem, ou com poucos caracteres de nova linha, será muito largo para ser lido confortavelmente na janela do terminal. Isso é irritante, mas é possível.

Uma questão mais perniciosa é ter que lidar com linhas de tal comprimento que representem um problema para o software que precisa processar, transmitir ou receber o texto. Isso pode ser causado por comprimentos de buffer interno ou outros aspectos do software que você não pode ajustar.

Mas há uma solução para isso, chamado fold.

Primeiros passos com dobra

Vamos dar uma olhada em uma parte do texto que tem linhas muito, muito longas. Observe que não estamos falando de frases aqui. (Embora o texto venha do Moby Dick de Herman Melville, temos o melhor dos dois mundos.)

Uma linha de texto é tudo, desde o último caractere de nova linha (ou o início do arquivo, se for a primeira linha do arquivo) até o próximo caractere de nova linha, independentemente do que esteja entre os dois. A linha pode conter muitas frases. Ele pode aparecer na janela do terminal muitas vezes. Mas ainda é uma única linha de texto.

Vejamos o texto em sua forma bruta:

menos moby-dick.txt

menos moby-dick.txt em uma janela de terminal

O texto é exibido em less:

Moby Dick exibido em menos em uma janela de terminal

O texto se estende de uma borda a outra da janela, e os contornos de linha são feios e quebram as palavras no meio.

Temos outra versão do arquivo com linhas curtas:

menos short-lines-moby-dick.txt

menos short-lines-moby-dick.txt em uma janela de terminal

As linhas neste arquivo são muito mais curtas. Cada linha é encerrada com um caractere de nova linha.

Recomendado:  Como visualizar facilmente arquivos modificados recentemente no Windows

Versão de linha curta de Moby Dick exibida em menos em uma janela de terminal

Se usarmos o hexdumpcomando, podemos olhar os valores de byte dentro do arquivo e ver os caracteres de nova linha. A -Copção (canônica) formata a saída para mostrar valores hexadecimais no corpo principal da tela com os equivalentes de texto em uma coluna ao lado. Vamos canalizar a saída para less:

hexdump -C short-lines-moby-dick.txt | Menos

hexdump -C short-lines-moby-dick.txt |  menos em uma janela de terminal

Ao pressionar a barra “ /”, você entrará lessna função de pesquisa de. Digite “0a” e pressione Enter. Os caracteres de nova linha serão destacados no texto. Você pode percorrer o arquivo e ver onde eles aparecem. Se necessário, você pode rolar a saída para os lados usando as teclas Left Arrowe Right Arrow.

Saída de hexdump em menos em uma janela de terminal com caracteres de nova linha destacados

Ter um caractere de nova linha no final de cada linha pode ser uma limitação em si. Não importa qual programa ou janela exiba este texto, as linhas não podem se adaptar a janelas com uma largura maior do que as próprias linhas. O comprimento da linha foi limitado pelos caracteres de nova linha.

Portanto, existem problemas com linhas longas e linhas curtas semelhantes.

Reduzindo Longas Linhas

O foldcomando tem uma opção -w(largura) que permite especificar uma nova largura máxima para uma seção de texto. Exibiremos o texto Moby Dick com uma largura máxima de 50 caracteres:

fold -w 50 moby-dick.txt

fold -w 50 moby-dick.txt em uma janela de terminal

O texto é exibido na janela do terminal, com o novo comprimento máximo de arquivo. O arquivo original não foi alterado. É apenas a saída foldque é reformatada.

Saída da dobra com texto Moby Dick exibido com comprimento máximo de 50 caracteres, em uma janela de terminal

À primeira vista, isso parece muito melhor. Mas as palavras ainda estão se dividindo no meio, no final das linhas. É definitivamente mais fácil de ler, mas algumas das quebras de palavras estranhas são chocantes.

Embora pareça que a margem direita do texto oscila para dentro e para fora, todos os comprimentos de linha são iguais. As linhas que parecem ser um caractere mais curtas que o resto acabam em um caractere de espaço.

Recomendado:  Como iniciar atalhos tocando na parte de trás do iPhone

Divisão de linhas em espaços

Podemos usar a -sopção (espaços) para garantir que as linhas sejam divididas apenas em caracteres de espaço e que nenhuma palavra seja quebrada em duas linhas.

fold -w 50 -s moby-dick.txt

fold -w 50 -s moby-dick.txt em uma janela de terminal

A saída agora tem uma margem direita irregular, mas é mais fácil de ler. Todas as palavras terminam nas linhas em que começaram.

Saída de fold -w 50 -s moby-dick.txt em uma janela de terminal

Tornando as linhas curtas mais longas

Além de tornar as linhas longas mais curtas, podemos usar foldpara remover os comprimentos de linha obrigatórios de linhas mais curtas.

fold -w 75 short-lines-moby-dick.txt

fold -w 75 short-lines-moby-dick.txt em uma janela de terminal

Os caracteres de nova linha são removidos e o texto agora quebra no ou antes do comprimento máximo atribuído.

Saída de um fold -w 75 short-lines-moby-dick.txt em uma janela de terminal

Tornando as alterações permanentes

foldnão pode modificar o arquivo original. Se quiser manter as alterações, você terá que redirecionar a saída foldpara um novo arquivo. Vamos redirecionar a saída para um arquivo denominado “modified-moby-dick.txt ”.

fold -w 75 -s short-lines-moby-dick.txt> modificado-moby-dick.txt

fold -w 75 -s short-lines-moby-dick.txt> modificado-moby-dick.txt em uma janela de terminal

Vamos dar uma olhada em nosso novo arquivo:

menos modificado-moby-dick.txt

menos modificado-moby-dick.txt em uma janela de terminal

Como está nosso novo arquivo?

menos modificado-moby-dick.txt em uma janela de terminal

O texto agora está se ajustando perfeitamente em nossa nova largura de linha, que é maior do que o comprimento de linha do arquivo original.

Usando o fold com streams

Podemos usar foldpara reformatar fluxos de texto. Não se restringe a trabalhar apenas com arquivos. Vamos ver como é a saída bruta da journalctl ferramenta. A -fopção (seguir) mostra as entradas mais recentes no systemddiário e as atualizações à medida que chegam novas entradas .

sudo journalctl -f

sudo journalctl -f em uma janela de terminal

A saída quebra na borda da janela do terminal.

Saída de sudo journalctl -f em uma janela de terminal

Não parece tão ruim, mas para fins de demonstração, vamos reduzir um pouco sua largura. Vamos canalizar a saída de journalctlpara fold. Estamos definindo a largura máxima para 65 caracteres e quebrando as linhas apenas em espaços.

sudo journalctl -f | fold -w 65 -s

sudo journalctl -f |  fold -w 65 -s em uma janela de terminal

A tela parece um pouco menos opressiva e um toque mais elegante também.

Saída de sudo journalctl -f |  fold -w 65 -s em uma janela de terminal


As paredes de texto sólido podem parecer impenetráveis. Eles são desanimadores e difíceis de lidar. Quando você precisar ver o bosque das árvores, invoque folde imponha um pouco de ordem.