tac e rev - Invertendo Linhas e Caracteres

tac e rev - Invertendo Linhas e Caracteres

O que você vai conseguir fazer

  • Inverter a ordem das linhas de um arquivo com `tac`
  • Inverter os caracteres dentro de cada linha com `rev`
  • Distinguir `tac`, `rev` e `tail` e escolher o certo

Pré-requisitos (leia estes primeiro)

O que você vai aprender

  • Como tac inverte a ordem das linhas (última linha primeiro)
  • Como rev inverte os caracteres em cada linha (abc -> cba)
  • Uma resposta clara para "qual devo usar?" - tac vs rev
  • Truques práticos: lendo logs do mais recente primeiro e combinando ambos

As palavras usadas aqui (para não confundir depois)

  • Linha: uma linha dentro do arquivo. É tudo o que fica entre uma quebra de linha e a próxima.
  • Ordem das linhas: qual linha vem em primeiro, em segundo, e assim por diante. É a única coisa que o tac muda.
  • Caracteres da linha: os caracteres que formam uma linha. É a única coisa que o rev muda.
  • Entrada padrão: os dados que chegam do comando anterior por um pipe (|). Ela pode substituir um arquivo.

"Inverter as linhas" e "inverter os caracteres" são dois trabalhos separados. Mantenha os dois separados e o resto do artigo se encaixa.

Resumo Rápido (a diferença principal)

  • Inverter a ordem das linhas -> tac ("cat" escrito ao contrário)
  • Inverter os caracteres dentro de uma linha -> rev (abreviação de reverse)
  • Tanto o nome quanto o alvo são invertidos. Quando confuso: tac = linhas / rev = caracteres

Pré-requisitos (ambiente)

  • SO: Ubuntu / qualquer distribuição Linux comum
  • tac vem com GNU coreutils, rev vem com util-linux. Ambos são instalados por padrão

1. O que é tac e o que ele pode fazer?

Conclusão: tac imprime as linhas de um arquivo da última para a primeira, linha por linha. Seu nome é cat escrito ao contrário.

Lina: Senpai, cat imprime um arquivo de cima para baixo. E se eu quiser ao contrário - de baixo para cima?
Veterano Linny: É exatamente quando você usa tac. É cat escrito ao contrário.
Veterano Linny: A função também corresponde ao nome. Ele imprime as linhas na ordem inversa.
Lina: Até o nome é invertido.
Veterano Linny: Exato. Vamos ver um cat normal primeiro.
$ cat fruits.txt
apple
banana
cherry
$ tac fruits.txt
cherry
banana
apple
Lina: As linhas inteiras foram invertidas de baixo para cima. Mas as palavras em si não mudaram.
Veterano Linny: Esse é o ponto chave. O tac só move a ordem das linhas.
Veterano Linny: Ele nunca toca no que está dentro de uma palavra como apple. Por isso a grafia continua igual.

O separador padrão é uma nova linha. Use -s para trocar.

Onde o separador acaba aparecendo é menos intuitivo do que se espera, então não há necessidade de usar isso logo no começo. Leia man tac quando quiser os detalhes.

2. Por que inverter linhas é útil?

Conclusão: Logs adicionam linhas antigas no topo e novas no final, então tac reordena para ler os eventos mais recentes primeiro.

Lina: Qual é o objetivo de inverter linhas?
Veterano Linny: O maior uso são arquivos de log. Novos registros entram sempre no final.
Veterano Linny: Então o evento mais recente fica sempre na última linha.
Lina: Mas eu quero o mais recente, e rolar até o final toda vez cansa.
Veterano Linny: É aí que o tac brilha. Inverta e a linha mais nova vem primeiro.
Veterano Linny: Combine com head e você vê os últimos 5 eventos, do mais recente para o mais antigo.
$ tac access.log | head -n 5
192.168.0.9 - GET /login 200
192.168.0.4 - GET /api 500
192.168.0.4 - GET /api 500
192.168.0.7 - GET / 200
192.168.0.2 - GET /about 200

O tail mostra as últimas linhas na ordem original. Se você quer essas linhas do mais recente para o mais antigo, o trabalho é do tac. Objetivos diferentes, ferramentas diferentes.

3. O que é rev e como é diferente do tac?

Conclusão: rev inverte os caracteres dentro de cada linha da esquerda para a direita. Ele nunca altera a ordem das linhas - um alvo completamente diferente do tac (que inverte linhas).

Lina: O tac inverte linhas. Então o que o rev inverte?
Veterano Linny: O rev inverte os caracteres dentro de uma única linha. É abreviação de reverse.
Veterano Linny: Ele só muda o conteúdo de cada linha. A ordem das linhas fica onde está.
Lina: Então abc vira cba?
Veterano Linny: Exatamente. Vamos comparar no mesmo arquivo.
$ rev fruits.txt
elppa
ananab
yrrehc

tac vs rev (o essencial)

Comando O que inverte apple -> Ordem das linhas
tac a ordem das linhas apple muda
rev caracteres por linha elppa não muda
Lina: Os nomes são ambos "reverse", mas o que eles invertem é diferente. tac = linhas, rev = caracteres.
Veterano Linny: Memorize isso e está pronto. Eles até vêm de pacotes diferentes.
Veterano Linny: O tac vem do coreutils e o rev do util-linux. Mas ambos já vêm instalados.

4. O que acontece quando você combina tac e rev?

Conclusão: tac file | rev inverte tanto a ordem das linhas quanto os caracteres em cada linha. Basta conectá-los com um pipe.

Lina: E se eu quiser inverter tanto as linhas quanto os caracteres?
Veterano Linny: Conecte os dois com um pipe. Envie a saída do tac direto para o rev.
$ tac fruits.txt | rev
yrrehc
ananab
elppa
Lina: cherry vem primeiro, então as linhas foram invertidas. E yrrehc mostra os caracteres invertidos também.
Veterano Linny: Exato, as duas etapas se aplicam. O tac inverteu as linhas e depois o rev inverteu os caracteres.
Veterano Linny: rev | tac dá o mesmo resultado. Os dois comandos mexem em coisas diferentes, então a ordem não importa.

O rev também lê a entrada padrão. echo "Linux" | rev retorna xuniL. Não é preciso nenhum arquivo, então dá para testar por um pipe a qualquer momento.

5. Lina Tropeça: Usar rev no Lugar do tac

Conclusão: Usar rev quando você queria inverter linhas parece texto ilegível. Nada quebrou: os caracteres só foram invertidos.

Vamos criar um log pequeno para praticar.

$ cat << 'EOF' > mini.log
2026-06-01 start
2026-06-02 error
2026-06-03 done
EOF
Lina: Senpai, tentei ler este log do mais recente primeiro e a tela virou uma bagunça.
$ rev mini.log
trats 10-60-6202
rorre 20-60-6202
enod 30-60-6202
Lina: Isso é texto ilegível? Fiquei em pânico achando que tinha quebrado o arquivo.
Veterano Linny: Calma. Nada ficou ilegível. Você usou o rev, então os caracteres de cada linha foram invertidos da esquerda para a direita.
Lina: Espera, esse é o comportamento correto?
Veterano Linny: É sim. Olhe com atenção: 2026-06-01 virou 10-60-6202. Leia da direita para a esquerda e o original volta.
Lina: É verdade, dá para ler ao contrário. Então o arquivo nunca foi danificado. Que alívio.
Veterano Linny: Para mudar a ordem das linhas, use o tac. Assim você vê do mais recente para o mais antigo.
$ tac mini.log
2026-06-03 done
2026-06-02 error
2026-06-01 start
Lina: Era esse formato que eu queria. Vou tomar cuidado para não trocar tac e rev.
Veterano Linny: É o erro mais comum. Lembre que os dois têm alvos diferentes e você fica bem.

Nenhum dos dois comandos muda o arquivo original. Os dois só imprimem o resultado na tela. Então mesmo uma troca deixa o seu arquivo intacto.

Repare que o tac e o rev ainda não existem no terminalUm programa interativo que interpreta os comandos digitados e os executa. virtual deste site. Teste os exemplos deste artigo no seu próprio Linux ou terminal.

6. Armadilhas comuns e quando usar qual

Conclusão: tac inverte a ordem das linhas; rev inverte caracteres dentro de uma linha. Misturá-los é o principal erro - quando em dúvida, teste em um arquivo pequeno.

O que você quer Comando
Reordenar linhas de baixo para cima tac file
Ler um log do mais recente primeiro tac log
Inverter caracteres em cada linha rev file
Inverter linhas e caracteres tac file | rev

Erros fáceis de evitar

  • Trocar tac por rev. Usar rev quando você queria inverter linhas deixa a saída com cara de ilegível
  • Confundir tail com tac. O tail mantém a ordem e o tac a inverte
  • Executar em um arquivo enorme sem pensar. Teste com head ou com um exemplo pequeno antes

7. Mini Exercícios: Tente Você Mesmo

Conclusão: Três exercícios -- inverter linhas, inverter caracteres e combinar os dois -- confirmam na prática o alvo de cada comando.

Lina: Entendi a diferença. Quero confirmar na prática.
Veterano Linny: Ótimo. Aqui vão três tarefas. Crie primeiro o arquivo de treino e depois tente.
$ cat << 'EOF' > animals.txt
penguin
tiger
whale
EOF

Tarefa 1: Imprima as linhas de animals.txt de baixo para cima.

Ver dica 1 (direcionamento)

Você quer mudar a ordem das linhas. Os caracteres de cada linha continuam como estão.

Ver dica 2 (nome do comando)

O comando é o tac. Não precisa de opção.

Ver a resposta
$ tac animals.txt
whale
tiger
penguin

Só a ordem das linhas mudou. A grafia de cada palavra continua igual.

Tarefa 2: Imprima cada linha de animals.txt com os caracteres invertidos.

Ver dica 1 (direcionamento)

Desta vez a ordem das linhas fica parada. Só os caracteres de cada linha são invertidos.

Ver dica 2 (nome do comando)

O comando é o rev.

Ver a resposta
$ rev animals.txt
niugnep
regit
elahw

A ordem das linhas não mudou. Só os caracteres foram invertidos.

Tarefa 3: Inverta a ordem das linhas e também os caracteres de cada linha.

Ver dica 1 (direcionamento)

São dois trabalhos, um depois do outro. Entregue o resultado do primeiro direto ao segundo.

Ver dica 2 (nome do comando)

Você precisa do tac e do rev. O símbolo que liga os dois é o |.

Ver a resposta
$ tac animals.txt | rev
elahw
regit
niugnep

Escrever rev animals.txt | tac dá o mesmo resultado.

8. Revisão

Lina: Vou resumir. O tac muda a ordem das linhas e o rev muda os caracteres de cada linha.
Veterano Linny: Exato. Os nomes se parecem, então lembre deles pelo alvo.
Lina: Para ler um log do mais recente primeiro, uso o tac. O tail mantém a ordem original.
Veterano Linny: Perfeito. Nenhum dos dois muda o arquivo, então na dúvida teste em um arquivo pequeno.

Resumo de Hoje em 3 Linhas

  1. O tac inverte a ordem das linhas e não mexe nos caracteres
  2. O rev inverte os caracteres de cada linha e não mexe na ordem das linhas
  3. Para ler um log do mais recente primeiro, use o tac. O tail mostra o final na ordem original

O Que Ler em Seguida