Domine `cat` e `tac` no Linux: Truques e Segredos Revelados!

Foto do autor

By luis

Os comandos cat e tac são frequentemente utilizados para exibir o conteúdo de arquivos de texto, mas suas capacidades vão além do básico. Vamos explorar algumas funcionalidades úteis desses comandos no terminal Linux.

Apesar de serem considerados comandos simples, cat e tac possuem um grande potencial quando se trata de manipular arquivos. Ao explorar as diferentes formas de utilização, percebemos que são ferramentas robustas e capazes de realizar tarefas complexas.

O Comando cat

O comando cat é empregado para visualizar o conteúdo de arquivos de texto e também para concatenar, ou seja, juntar partes de diferentes arquivos para formar um único arquivo.

Na era das conexões dial-up, quando a velocidade de download era limitada, arquivos binários eram divididos em vários arquivos menores. Essa estratégia facilitava o processo, pois permitia que o usuário baixasse cada parte separadamente e, caso alguma falhasse, baixava apenas aquela parte novamente. Para reconstruir o arquivo completo, utilizava-se a concatenação, processo em que o cat era fundamental, dando origem ao seu nome.

Com a popularização da banda larga, essa necessidade diminuiu, mas o cat continua sendo uma ferramenta relevante e útil.

Exibindo o Conteúdo de um Arquivo de Texto

Para exibir o conteúdo de um arquivo de texto no terminal, basta utilizar o comando cat seguido do nome do arquivo:

cat nome_do_arquivo.txt

É crucial garantir que o arquivo seja um arquivo de texto. A tentativa de exibir o conteúdo de um arquivo binário pode levar a resultados inesperados, como o travamento do terminal.

Abaixo, um exemplo da exibição do conteúdo de um arquivo chamado poema1.txt:

Caso queira exibir o conteúdo de vários arquivos simultaneamente, basta listar os nomes dos arquivos na linha de comando:

cat poema1.txt poema2.txt

O resultado será a exibição do conteúdo dos arquivos na ordem especificada, concatenando-os.

Utilizando cat com less

Quando a quantidade de texto exibida é muito grande, podemos utilizar o comando less para navegar pelo texto de forma mais controlada. Para isso, utilizamos o operador pipe (|), que direciona a saída do cat para o less:

cat poema1.txt poema2.txt | less

Dessa forma, podemos visualizar o conteúdo dos arquivos de maneira mais confortável, navegando pelo texto com as setas do teclado ou outras opções do less.

Numerando as Linhas de um Arquivo

O comando cat oferece a opção -n para numerar as linhas de um arquivo:

cat -n poema1.txt

As linhas serão numeradas sequencialmente, incluindo as linhas em branco.

Numerando Apenas as Linhas Não-Vazias

Para numerar apenas as linhas de texto, ignorando as linhas em branco, utilizamos a opção -b:

cat -b poema1.txt

As linhas em branco serão ignoradas na numeração.

Suprimindo Múltiplas Linhas em Branco

Caso haja várias linhas em branco consecutivas, podemos utilizar a opção -s para exibir apenas uma linha em branco entre os blocos de texto:

cat -s poema1.txt

O conteúdo do arquivo não é alterado, apenas a forma como o cat o exibe.

Exibindo Caracteres de Tabulação

Para identificar espaços em branco causados por tabulações, podemos usar a opção -T. Tabulações serão exibidas como ^I:

cat -T poema1.txt

As tabulações são representadas pelos caracteres “^I”.

Exibindo o Fim das Linhas

A opção -E permite identificar espaços em branco no final das linhas, representados pelo caractere $:

cat -E poema1.txt

O final de cada linha é marcado pelo caractere “$”.

Concatenando Arquivos

Para juntar o conteúdo de dois arquivos em um novo arquivo, utilizamos o operador >. Por exemplo, para criar um arquivo jabberwocky.txt com o conteúdo de poema1.txt e poema2.txt:

cat poema1.txt poema2.txt > jabberwocky.txt

Podemos verificar o conteúdo do novo arquivo com:

 cat jabberwocky.txt 

O novo arquivo contém o conteúdo de ambos os arquivos, concatenados.

Anexando Texto a um Arquivo Existente

Para adicionar conteúdo ao final de um arquivo já existente, utilizamos o operador >>. Usar apenas > sobrescreveria o arquivo.

Por exemplo, para adicionar o conteúdo do arquivo first_verse.txt ao final de jabberwocky.txt:

cat first_verse.txt >> jabberwocky.txt

Verificando o conteúdo de jabberwocky.txt, o novo conteúdo foi adicionado ao final do arquivo:

 cat jabberwocky.txt 

Redirecionando Entrada Padrão (stdin)

O comando cat também pode ser utilizado para redirecionar a entrada do teclado para um arquivo. Para isso, utilizamos o operador >. Tudo o que for digitado será redirecionado para o arquivo até que seja pressionado Ctrl + D.

cat > meu_poema.txt

Após digitar o texto e pressionar Ctrl + D, o conteúdo será salvo no arquivo meu_poema.txt. Podemos verificar o conteúdo com:

 cat meu-poema.txt 

O Comando tac

O comando tac é semelhante ao cat, mas exibe o conteúdo dos arquivos em ordem inversa.

Vamos ver um exemplo com o arquivo criado anteriormente:

tac meu_poema.txt

O conteúdo do arquivo será exibido com as linhas em ordem inversa.

Utilizando tac com Entrada Padrão (stdin)

Assim como o cat, o tac pode ser usado sem um nome de arquivo, nesse caso ele operará na entrada do teclado. Ao pressionar Ctrl + D, o conteúdo digitado será exibido em ordem inversa:

tac

A entrada é revertida e listada na janela do terminal.

Utilizando tac com Arquivos de Log

Além de apresentar o texto em ordem inversa, o tac pode ser utilizado para visualizar as últimas entradas de arquivos de log, que geralmente adicionam novas entradas no final do arquivo. Combinando tac com o comando head, podemos exibir a última linha do arquivo:

tac /var/log/syslog | head -1

O comando head exibe a primeira linha da saída de tac, que é a última linha do arquivo.

Utilizando tac com Registros de Texto

O tac também pode trabalhar com delimitadores diferentes da quebra de linha, permitindo tratar “pedaços” de dados como registros. Vamos analisar um arquivo de log:

less logfile.dat

O arquivo é formatado com sequências de três linhas de valores hexadecimais, seguidas por uma linha de rótulo que começa com = SEQ.

Se quisermos analisar o arquivo em ordem inversa, mas mantendo a ordem das três linhas hexadecimais em cada registro, podemos usar o seguinte comando:

tac logfile.dat | less

O resultado é a reversão do arquivo linha a linha, o que não é o ideal. Para que a ordem das linhas hexadecimais seja preservada, podemos utilizar as opções -b, -r e -s com tac:

tac -b -r -s "=SEQ.+[0-9]+$" logfile.dat | less

Vamos detalhar o comando:

  • -s (separador): especifica o delimitador entre os registros, nesse caso, a linha que inicia com =SEQ.
  • -r (regex): instrui o tac a tratar o separador como uma expressão regular.
  • -b (antes): faz com que o separador seja listado antes de cada registro, em vez de depois.
  • O delimitador ^=SEQ.+[0-9]+$ busca linhas que iniciam (^) com =SEQ, seguido por um ou mais caracteres quaisquer (.+), seguido por um ou mais dígitos ([0-9]+) e final de linha ($).

O arquivo agora é apresentado em ordem reversa, mas mantendo a ordem das linhas hexadecimais em cada bloco.

Tudo Tem um Propósito

No universo Linux, até os comandos mais simples podem revelar um poder surpreendente quando explorados a fundo.

A filosofia de design do Linux, que preza por utilitários simples que fazem uma coisa bem e que se comunicam facilmente com outros, resultou em comandos como o tac. Embora à primeira vista possa parecer estranho, ao investigar um pouco mais, descobrimos seu potencial.

Como diz o ditado, “não despreze a cobra por não ter chifres, pois quem pode dizer que ela não se tornará um dragão?”