Como usar os comandos cat e tac do Linux

Conteúdo

Arte de uma janela de terminal em um desktop Linux

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

Estes são dois pequenos comandos simples, que muitas vezes são descartados por serem apenas isso: muito simples para ser de uso real. Mas uma vez que você conhece as diferentes maneiras de usá-los, Você verá que eles são estupendamente capazes de fazer sua parte no trabalho pesado quando se trata de trabalhar com arquivos..

O comando do gato

cat se utiliza para navegar pelo conteúdo de arquivos de textoe unir partes de arquivos para formar um arquivo maior.

Num momento, na era do dial-up modem: Os arquivos binários costumavam ser divididos em vários arquivos menores para facilitar o download. Em vez de baixar um arquivo grande, puxou cada arquivo menor. Se um único arquivo não foi baixado corretamente, Gostaria apenas de obter aquele arquivo de volta.

Desde já, então eu precisava de uma maneira de reconstituir a coleção de arquivos menores em um único arquivo binário funcional. Esse procedimento foi chamado de concatenação. E é aí que cat entrou e de onde vem seu nome.

As conexões de banda larga e fibra fizeram com que essa necessidade específica diminuísse, assim como os sons estridentes de chamadas telefônicas, portanto, O que resta para cat fazer hoje? Muito na verdade.

Visualizando um arquivo de texto

Ter cat lista 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 é exibido na janela do terminal.

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

cat poem1.txt poem2.txt

Isso parece melhor; agora temos o poema completo.

Use gato com menos

O poema está todo lá, Mas ele passou pela janela rápido demais para ler os primeiros versos. Podemos canalizar a saída de cat dentro de less e rolar para baixo o texto em nosso próprio ritmo.

cat poem1.txt poem2.txt | menos

Agora podemos ir e voltar ao longo do texto em uma sequência, mesmo que esteja em dois arquivos de texto separados.

Numeração de linha em um arquivo

Podemos fazer com que o cat numere as linhas do arquivo conforme ele é exibido. Para fazer isso, nós usamos o -n opção (número).

cat -n poem1.txt

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

Não numere as linhas em branco

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

cat -b poem1.txt

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

Não exiba várias linhas em branco

Se houver seções de linhas em branco consecutivas em um arquivo, Nós podemos pergutar cat ignorar todas as linhas em branco, exceto uma. Olhe para este arquivo.

O seguinte comando causará cat para exibir apenas uma linha em branco de cada grupo de linhas em branco. A opção de que precisamos para conseguir isso é o -s (espaço em branco).

cat -s poem1.txt

Isso não afeta o conteúdo do arquivo de forma alguma; apenas mude a forma cat mostre o arquivo.

Exibir guias

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

cat -T poem1.txt

As guias são representadas pelos caracteres "^ I".

Visualizando o fim das linhas

Você pode verificar se há espaços em branco à direita usando o -E Opção (fim do espetáculo).

cat -E poem1.txt

Los finales de las líneas están representados por el carácter “$”.

Arquivos concatenados

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

cat poem1.txt poem2.txt > jabberwocky.txt

vamos usar cat para verificar nosso novo arquivo:

cat jabberwocky.txt

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

Adicionar texto a um arquivo existente

Isso é melhor, mas na realidade, não é o poema completo. O último verso está faltando. O último verso de Jabberwocky é o mesmo que o primeiro verso.

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 somente >. Se usarmos apenas um > Boa Sobrescrever jabberwocky.txt. Não queremos fazer isso. Nós queremos anexar texto no final.

cat first_verse.txt >> jabberwocky.txt

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

cat jabberwocky.txt

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

Redirigir stdin

Você pode redirecionar a entrada do teclado para um arquivo usando cat. Tudo que você digita é redirecionado para o arquivo até que você pressione Ctrl + D. Observe que usamos apenas um > porque queremos criar o arquivo (ou sobrescrever, sim existe).

gato > my_poem.txt

Podemos começar a digitar assim que emitirmos o comando. Pressionamos Ctrl + D quando terminarmos. Mais tarde, podemos verificar o conteúdo do novo arquivo com:

cat my-poem.txt

Aquele som como uma turbina distante é provavelmente Lewis Carroll girando em seu túmulo em alta velocidade.

O comando tac

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

Vamos ver isso:

tac my_poem.txt

E o arquivo é exibido na janela do terminal na ordem inversa. Nesta circunstância, não tem efeito sobre seus méritos literários.

Usando tac com stdin

Usando tac sem um nome de arquivo fará com que opere na entrada do teclado. Pressionando Ctrl + D irá parar o estágio de entrada, e o tac irá listar em ordem reversa o que você digitou.

tac

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

Usando tac com arquivos de log

Além dos truques de salão de baixa qualidade, poderia tac faça algo útil? Se pode. Muitos arquivos de log adicionam suas entradas mais recentes ao final do arquivo. Usando tac (e, contra-intuitivamente, head) podemos mostrar a última entrada na janela do terminal.

Nós usamos tac para listar o arquivo syslog de trás para frente e canalizá-lo para head. Contando head imprimir apenas a primeira linha que receber (isso 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 última entrada no arquivo syslog e então sai.

tenha em conta que head está apenas imprimindo uma linha, como pedimos, mas a linha é tão longa que envolve duas vezes. É por isso que eles se parecem com três linhas de saída na janela do terminal.

Use tac com registros de texto

O ultimo truque tac ele tem na manga é uma beleza.

Geralmente, tac operar em arquivos de texto trabalhando neles linha por linha, debaixo para cima. Uma linha é uma sequência de caracteres terminada por um novo caractere de linha. Mas podemos dizer tac trabalhar com outros delimitadores. Esto nos posibilita tratar “Fragmentos” de datos dentro del archivo de texto como registros de datos.

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, existe um formato de repetição para o arquivo. Existem sequências de três linhas de hexadecimal valores. Cada conjunto de três linhas hexadecimais tem uma linha de tag que começa com "= SEQ", seguido por uma sequência de dígitos.

Se rolarmos para o final do arquivo, podemos ver que existem muitos desses registros. O ultimo tem o numero 865.

Vamos supor, por qualquer razão, precisamos trabalhar com este arquivo na ordem inversa, registro de dados por registro de dados. A ordem das três linhas hexadecimais de cada registro de dados deve ser preservada.

Notaremos que as últimas três linhas do arquivo começam com os valores hexadecimais 93, E7 e B8, naquela ordem.

Vamos usar tac para inverter o arquivo. É um arquivo muito longo, portanto, vamos canalizá-lo para less.

tac logfile.dat | menos

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

Registramos anteriormente que as últimas três linhas do arquivo começam com os valores hexadecimais 93, E7 e B8, naquela ordem. A ordem dessas linhas foi invertida. Ao mesmo tempo, las líneas= SEQahora son abaixo cada conjunto de três linhas hexadecimais.

tac para o resgate.

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

Vamos analisar isso.

a -s Opção (separador) informa tac o que queremos usar como um delimitador entre nossos registros. Dados tac não use seu caractere de nova linha frequente, mas use nosso separador em vez.

a -r (regex) opção diz tac para tratar a cadeia de separação como um frase regular.

a -b (antes) opção causa tac listar o separador antes de cada registro em vez de depois dele (que é a posição frequente do seu separador padrão, o caractere de nova linha).

a -s (separador) corrente ^=SEQ.+[0-9]+*$ é descriptografado da seguinte forma:

a ^ personagem representa o começo da linha. Isso é seguido =SEQ.+[0-9]+*$. Isso instrui tac para buscar cada aparición 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 para less, como sempre.

arquivo de log invertido com registros de dados formados corretamente

Nuestro archivo ahora se presenta en orden inverso con cada línea de etiqueta= SEQlistada antes de suas três linhas de dados hexadecimais. As três linhas de valores hexadecimais estão em seus original pedido dentro de cada registro de dados.

Podemos verificar isso simplesmente. O primeiro valor das três primeiras linhas hexadecimais (quais eram as últimas três linhas antes de o arquivo ser revertido) corresponde aos valores dos quais pegamos um registro anterior: 93, E7 e B8, naquela ordem.

Isso é um hack e tanto para uma janela de terminal de linha única.

Tudo tem um propósito

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

A filosofia de design de utilitários simples eles fazem uma coisa bem, e que interagem facilmente com outros utilitários, levou a alguns pequenos comandos estranhos, O que tac. A primeira vista, parece um pouco estranho. Mas quando você olha abaixo da superfície, há um poder inesperado que você pode aproveitar a seu favor.

O, como outra filosofia diz, “No desprecies a la serpiente por no tener cuernos, porque quem pode dizer que ele não se tornará um dragão?”

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.