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 “= SEQ” ahora 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.
Nuestro archivo ahora se presenta en orden inverso con cada línea de etiqueta “= SEQ” listada 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);