Como usar o comando fold no Linux

O comando Linux fold traz resultados indisciplinados. Leia grandes trechos de texto, strings sem fim 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 Unix, o caractere de nova linha, também chamado de avanç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 de antes para a máquina de escrever. O cilindro, o cilindro em que o papel estava enrolado, foi montado em uma carruagem 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ê empurrava uma alavanca que trazia o carro de volta à sua posição original e que girava o rolo e movia 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 conhecida como alimentação de linha.

A alavanca foi substituída por uma chave quando a máquina de escrever ficou eletrificada. A chave estava identificada como Retorno de carro ou apenas Retorno. Alguns primeiros computadores, como a BBC Micro ainda usa o nome Return no que agora chamamos de tecla Enter.

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 é capaz de fazer.

Uma questão mais perniciosa é ter que lidar com linhas de tal extensão 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, chamada de fold.

Primeiros passos com dobra

Vamos dar uma olhada em uma parte do texto que contém 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 está 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:

less moby-dick.txt

O texto é exibido em menos:

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:

less short-lines-moby-dick.txt

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

Se usarmos o comando hexdump, podemos olhe para os valores de byte dentro do arquivo e veja os caracteres de nova linha. A opção -C (canônico) formata a saída para mostrar valores hexadecimais no principal