Categories: Tecnologia

Como usar os comandos cat e tac do Linux

Fatmawati Achmad Zaenuri / Shutterstock.com

Os  comandos cate tacexibem o conteúdo dos arquivos de texto, mas há mais do que aparenta. Mergulhe um pouco mais fundo e aprenda alguns truques produtivos de linha de comando do Linux.

Esses são dois pequenos comandos simples, muitas vezes descartados como sendo apenas isso – simples demais para ter alguma utilidade real. Mas depois de conhecer as diferentes maneiras de usá-los, você verá que eles são perfeitamente capazes de fazer sua parte justa no trabalho pesado quando se trata de trabalhar com arquivos.

O comando gato

caté usado para examinar o conteúdo de arquivos de texto e para juntar partes de arquivos para formar um arquivo maior.

Ao mesmo tempo – na era do modem dial-up – os  arquivos binários costumavam ser divididos em vários arquivos menores para facilitar o download. Em vez de baixar um arquivo grande, você puxou cada arquivo menor. Se um único arquivo falhou ao baixar corretamente, você apenas recuperaria esse arquivo novamente.

Obviamente, você precisava de uma maneira de reconstituir a coleção de arquivos menores de volta no único arquivo binário de trabalho. Esse processo foi chamado de concatenação. E é aí que catentrou e de onde vem seu nome.

As conexões de banda larga e de fibra fizeram com que essa necessidade específica diminuísse – da mesma forma que os sons de discagem estridentes – então o que resta catfazer hoje? Bastante, na verdade.

Exibindo um arquivo de texto

Para catlistar o conteúdo de um arquivo de texto em uma janela de terminal, use o seguinte comando.

Certifique-se de que o arquivo seja um arquivo de texto. Se você tentar listar o conteúdo de um arquivo binário na janela do terminal, os resultados serão imprevisíveis. Você pode acabar com uma sessão de terminal bloqueada ou pior.

cat poem1.txt

O conteúdo do arquivo poem1.txt é mostrado na janela do terminal.

Essa é apenas metade do famoso poema. Onde está o resto? Há outro arquivo aqui chamado poem2.txt. Podemos fazer catlistar o conteúdo de vários arquivos com um comando. Tudo o que precisamos fazer é listar os arquivos em ordem na linha de comando.

cat poem1.txt poem2.txt

Isso parece melhor; temos o poema inteiro agora.

Usando gato com menos

O poema está todo lá, mas passou pela janela rápido demais para ler os primeiros versos. Nós podemos canalizar a saída de catem lesse percorrer o texto em nosso próprio ritmo.

cat poem1.txt poem2.txt | Menos

Agora podemos avançar e retroceder no texto em um único fluxo, embora ele seja mantido em dois arquivos de texto separados.

Numerando as linhas em um arquivo

Podemos fazer com que o cat numere as linhas do arquivo conforme são exibidas. Para fazer isso, usamos a -nopção (número).

cat -n poem1.txt

As linhas são numeradas conforme são exibidas na janela do terminal.

Não numere linhas em branco

Conseguimos numerar as linhas por cat, mas as linhas em branco entre os versos também estão sendo contadas. Para ter as linhas de texto numeradas, mas para ignorar as linhas em branco, use a opção -b(número não vazio).

cat -b poem1.txt

Agora as linhas de texto estão numeradas e as linhas em branco são ignoradas.

Não mostrar várias linhas em branco

Se houver seções de linhas em branco consecutivas em um arquivo, podemos pedir catpara ignorar todas, exceto uma linha em branco. Olhe para este arquivo.

O próximo comando catmostrará apenas uma linha em branco de cada grupo de linhas em branco. A opção de que precisamos para conseguir isso é a opção -s(squeeze-blank).

cat -s poem1.txt

Isso não afeta o conteúdo do arquivo de forma alguma; apenas muda a maneira como cato arquivo é exibido.

Exibir guias

Se você quiser saber se o espaço em branco é causado por espaços ou tabulações, você pode descobrir usando a opção -T(mostrar tabs).

cat -T poem1.txt

As guias são representadas pelos caracteres “^ I”.

Exibindo o Fim das Linhas

Você pode verificar se há espaços em branco à direita usando a opção -E (mostrar termina).

cat -E poem1.txt

Os finais das linhas são representados pelo caractere “$”.

Arquivos de concatenação

Não faz sentido ter um poema salvo em dois arquivos, com uma metade em cada. Vamos juntá-los e fazer um novo arquivo com o poema inteiro nele.

cat poem1.txt poem2.txt> jabberwocky.txt

vamos usar catpara verificar nosso novo arquivo:

cat jabberwocky.txt

Nosso novo arquivo contém o conteúdo dos outros dois arquivos.

Anexar texto a um arquivo existente

Isso é melhor, mas na verdade, não é o poema inteiro. O último verso está faltando. O último versículo em Jabberwocky é igual ao primeiro versículo.

Se tivermos o primeiro versículo em um arquivo, podemos adicioná-lo ao final do arquivo jabberwocky.txt e teremos o poema completo.

Neste próximo comando, temos que usar >>, não apenas >. Se usarmos um >, sobrescreveremos jabberwocky.txt. Não queremos fazer isso. Queremos acrescentar texto ao final dele.

cat first_verse.txt >> jabberwocky.txt

Vamos verificar o conteúdo do arquivo jabberwocky.txt:

cat jabberwocky.txt

E, finalmente, todas as partes do poema estão juntas.

Redirecionando stdin

Você pode redirecionar a entrada do teclado para um arquivo usando cat. Tudo o que você digita é redirecionado para o arquivo até que você pressione Ctrl + D. Observe que usamos um único >porque queremos criar o arquivo (ou sobrescrevê-lo, se existir).

cat> meu_poem.txt

Podemos começar a digitar assim que emitirmos o comando. Apertamos Ctrl + D quando terminamos. Podemos então verificar o conteúdo do novo arquivo com:

cat my-poem.txt

Esse som como uma turbina distante é provavelmente Lewis Carroll girando em sua sepultura em alta velocidade.

O comando tac

tacé semelhante a cat, mas lista o conteúdo dos arquivos na ordem inversa .

Vamos ver isso:

tac my_poem.txt

E o arquivo é listado na janela do terminal na ordem inversa. Nesse caso, não tem efeito em seus méritos literários.

Usando tac com stdin

Usar tacsem um nome de arquivo fará com que ele opere na entrada do teclado. Pressionar Ctrl + D interromperá a fase de entrada e o tac listará em ordem reversa tudo o que você digitou.

tac

Quando Ctrl + D é pressionado, a entrada é revertida e listada na janela do terminal.

Usando tac com arquivos de log

Além de truques de salão de baixa qualidade, pode tacfazer algo útil? Sim pode. Muitos arquivos de log acrescentam suas entradas mais recentes na parte inferior do arquivo. Usando tac(e, contra-intuitivamente  head), podemos colocar a última entrada na janela do terminal.

Usamos tacpara listar o arquivo syslog ao contrário e enviá-lo para head. Dizendo headpara imprimir apenas a primeira linha que receber (que graças a tacé a última linha do arquivo), vemos a última entrada no arquivo syslog.

tac / var / log / syslog | cabeça -1

head imprime a entrada mais recente do arquivo syslog e depois sai.

Observe que headestá imprimindo apenas uma linha – conforme solicitamos – mas a linha é tão longa que se enrola duas vezes. É por isso que parecem três linhas de saída na janela do terminal.

Usando tac com registros de texto

O último truque  tac na manga é uma beleza.

Normalmente, tacopera em arquivos de texto, percorrendo-os linha por linha, de baixo para cima. Uma linha é uma sequência de caracteres terminada por um caractere de nova linha. Mas podemos dizer tacpara trabalhar com outros delimitadores. Isso nos permite tratar “pedaços” de dados dentro do arquivo de texto como registros de dados.

Digamos que temos um arquivo de log de algum programa que precisamos revisar ou analisar. Vamos dar uma olhada em seu formato com less.

menos logfile.dat

Como podemos ver, o formato do arquivo se repete. Existem sequências de três linhas de valores hexadecimais . Cada conjunto de três linhas hexadecimais tem uma linha de rótulo que começa com “= SEQ”, seguida por uma sequência de dígitos.

Se rolarmos até o final do arquivo, podemos ver que existem muitos desses registros. O último é numerado 865.

Vamos supor que, por qualquer motivo, precisamos trabalhar nesse arquivo na ordem inversa, registro de dados por registro de dados. A ordem das três linhas hexadecimais em cada registro de dados deve ser preservada.

Faremos uma observação que as três linhas finais do arquivo começam com os valores hexadecimais 93, E7 e B8, nessa ordem.

Vamos usar tac para reverter o arquivo. É um arquivo muito longo, então vamos enviá-lo less.

tac logfile.dat | Menos

Isso inverte o arquivo, mas não é o resultado que desejamos. Queremos que o arquivo seja revertido, mas as linhas em cada registro de dados devem estar em sua ordem original.

Registramos anteriormente que as três linhas finais do arquivo começam com os valores hexadecimais 93, E7 e B8, nessa ordem. A ordem dessas linhas foi invertida. Além disso, as linhas “= SEQ” agora estão abaixo de cada conjunto de três linhas hexadecimais.

tac para o resgate.

tac -b -r -s ^ = SEQ. + [0-9] + * $ logfile.dat | Menos

Vamos decompô-lo.

A -sopção (separador) informa  taco que queremos usar como delimitador entre nossos registros. Ele diz tac para não usar seu caractere de nova linha usual, mas para usar nosso separador.

A -ropção (regex) diz tac para tratar a string separadora como uma expressão regular .

A -bopção (antes) faz taccom que o separador seja listado antes de cada registro em vez de depois dele (que é a posição usual de seu separador padrão, o caractere de nova linha).

A -sstring (separador) ^=SEQ.+[0-9]+*$é decifrada da seguinte forma:

O ^personagem representa o início da linha. Isso é seguido por =SEQ.+[0-9]+*$. Isso instrui  taca procurar cada ocorrência de “= SEQ.” no início de uma linha, seguido por qualquer sequência de dígitos (indicado por [0-9]) e seguido por qualquer outro conjunto de caracteres (indicado por *$).

Estamos canalizando tudo less, como de costume.

Nosso arquivo agora é apresentado em ordem reversa com cada linha de rótulo “= SEQ” listada antes de suas três linhas de dados hexadecimais. As três linhas de valores hexadecimais estão em sua ordem original em cada registro de dados.

Podemos verificar isso de forma simples. O primeiro valor das três primeiras linhas de hexadecimal (que eram as últimas três linhas antes de o arquivo ser revertido) correspondem aos valores que registramos anteriormente: 93, E7 e B8, nessa ordem.

Esse é um truque e tanto para um one-liner de janela de terminal.

Tudo tem um propósito

No mundo Linux, mesmo os comandos e utilitários aparentemente mais simples podem ter propriedades surpreendentes e poderosas.

A filosofia de design de utilitários simples que fazem uma coisa bem e que se relacionam facilmente com outros utilitários deu origem a alguns pequenos comandos estranhos, como tac. À primeira vista, parece um tanto estranho. Mas quando você perscruta abaixo da superfície, há um poder inesperado que você pode usar em sua vantagem.

Ou, como outra filosofia diz, “Não desprezes a cobra por não ter chifres, pois quem pode dizer que ela não se tornará um dragão?”

maisroot

Recent Posts

O novo aplicativo “PC Manager” da Microsoft se parece muito com o CCleaner

Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…

1 ano ago

Como reiniciar um PS4

Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…

1 ano ago

Veja por que as reticências são tão assustadoras ao enviar mensagens de texto…

A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…

1 ano ago

O telescópio James Webb acaba de capturar os “Pilares da Criação”

A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…

1 ano ago

Você poderá baixar o Proton Drive mais cedo do que pensa

O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…

1 ano ago

Como aumentar o zoom no Photoshop

Para ver suas fotos mais de perto ou para uma edição precisa , você pode…

1 ano ago