O utilitário fold
no Linux apresenta resultados que podem parecer desorganizados à primeira vista. Ele é capaz de lidar com grandes blocos de texto, sequências de caracteres sem fim e fluxos de dados não formatados, permitindo que você controle a largura da saída. Vamos explorar como ele funciona.
Entendendo as Linhas de Texto no Terminal Linux
Para dominar o Linux, é crucial entender o básico. Então, o que exatamente define uma linha de texto? É uma sequência de caracteres, incluindo letras, números, símbolos e espaços, que é finalizada por um byte especial que sinaliza o início de uma nova linha. No Linux e Unix, o caractere de nova linha, também conhecido como avanço de linha, é utilizado para marcar o fim de uma linha. Este caractere é representado pelo valor 0x0a em hexadecimal, que corresponde a 10 em decimal.
É importante notar que diferentes sistemas operacionais utilizam valores distintos para indicar o fim de uma linha. No Windows, por exemplo, uma sequência de dois bytes é usada para essa finalidade. Em arquivos de texto do Windows, o caractere de nova linha é imediatamente seguido pelo caractere de retorno de carro, cujo valor é 0x0d em hexadecimal e 13 em decimal.
Os termos “avanço de linha” e “retorno de carro” têm suas origens nas antigas máquinas de escrever. O cilindro, onde o papel era enrolado, era montado em um carro móvel. A cada tecla pressionada, o carro se movia um caractere para a esquerda. Para começar uma nova linha, uma alavanca era acionada, trazendo o carro de volta à posição inicial e girando o cilindro, movendo o papel uma linha para cima. Essa ação era conhecida como retorno do carro, e a rotação do cilindro (e avanço do papel) como avanço de linha.
Com a eletrificação das máquinas de escrever, a alavanca foi substituída por uma tecla, que passou a ser identificada como Retorno de carro ou simplesmente Retorno. Alguns dos primeiros computadores, como o BBC Micro, ainda usavam o nome Return para a tecla que hoje conhecemos como Enter.
Geralmente, não podemos ver os caracteres de nova linha diretamente, apenas seus efeitos. O caractere de nova linha instrui o software que exibe ou processa o texto a iniciar uma nova linha.
Por que Linhas Longas São um Problema?
Textos que contêm poucos ou nenhum caractere de nova linha podem se tornar muito extensos para serem lidos confortavelmente em uma janela de terminal. Apesar de ser incômodo, ainda é possível visualizar tais textos.
Um problema mais sério surge quando temos que lidar com linhas tão longas que dificultam o processamento, transmissão ou recebimento do texto por parte de softwares. Isso pode ser resultado de limites de buffer interno ou outras características do software que não podemos alterar.
Felizmente, existe uma solução para esse problema: o comando fold
.
Iniciando com o Comando fold
Vamos analisar um trecho de texto que contém linhas extremamente longas. É importante destacar que não estamos falando de frases aqui. (Utilizaremos um trecho de Moby Dick, de Herman Melville, para ilustrar o conceito).
Uma linha de texto é tudo o que se encontra entre um caractere de nova linha e o seguinte (ou, no caso da primeira linha, o início do arquivo). Independentemente do que esteja presente entre esses caracteres, ou mesmo que a linha se estenda por várias linhas na tela, ela ainda é considerada uma única linha de texto.
Vejamos o texto em sua forma bruta:
less moby-dick.txt
O texto é exibido no visualizador less
:
O texto se estende de uma extremidade a outra da janela, e as quebras de linha são irregulares e dividem palavras no meio.
Temos uma versão alternativa do arquivo com linhas mais curtas:
less short-lines-moby-dick.txt
Neste caso, as linhas são muito mais curtas, pois cada uma termina com um caractere de nova linha.
Utilizando o comando hexdump
, podemos examinar os valores dos bytes dentro do arquivo e identificar os caracteres de nova linha. A opção -C
(canônico) formata a saída para exibir os valores hexadecimais em colunas.