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
tacinverte a ordem das linhas (última linha primeiro) - Como
revinverte os caracteres em cada linha (abc -> cba) - Uma resposta clara para "qual devo usar?" -
tacvsrev - 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
tacmuda. - Caracteres da linha: os caracteres que formam uma linha. É a única coisa que o
revmuda. - 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
tacvem com GNU coreutils,revvem com util-linux. Ambos são instalados por padrão
1. O que é tac e o que ele pode fazer?
Conclusão:
tacimprime as linhas de um arquivo da última para a primeira, linha por linha. Seu nome écatescrito ao contrário.
cat imprime um arquivo de cima para baixo. E se eu quiser ao contrário - de baixo para cima?tac. É cat escrito ao contrário.cat normal primeiro.$ cat fruits.txt
apple banana cherry
$ tac fruits.txt
cherry banana apple
tac só move a ordem das linhas.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
tacreordena para ler os eventos mais recentes primeiro.
tac brilha. Inverta e a linha mais nova vem primeiro.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:
revinverte os caracteres dentro de cada linha da esquerda para a direita. Ele nunca altera a ordem das linhas - um alvo completamente diferente dotac(que inverte linhas).
tac inverte linhas. Então o que o rev inverte?rev inverte os caracteres dentro de uma única linha. É abreviação de reverse.abc vira cba?$ 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 |
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 | revinverte tanto a ordem das linhas quanto os caracteres em cada linha. Basta conectá-los com um pipe.
tac direto para o rev.$ tac fruits.txt | rev
yrrehc ananab elppa
tac inverteu as linhas e depois o rev inverteu os caracteres.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
revquando 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
$ rev mini.log
trats 10-60-6202 rorre 20-60-6202 enod 30-60-6202
rev, então os caracteres de cada linha foram invertidos da esquerda para a direita.2026-06-01 virou 10-60-6202. Leia da direita para a esquerda e o original volta.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
tac e rev.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:
tacinverte a ordem das linhas;revinverte 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
tacporrev. Usarrevquando você queria inverter linhas deixa a saída com cara de ilegível - Confundir
tailcomtac. Otailmantém a ordem e otaca inverte - Executar em um arquivo enorme sem pensar. Teste com
headou 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.
$ 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
tac muda a ordem das linhas e o rev muda os caracteres de cada linha.tac. O tail mantém a ordem original.Resumo de Hoje em 3 Linhas
- O
tacinverte a ordem das linhas e não mexe nos caracteres - O
revinverte os caracteres de cada linha e não mexe na ordem das linhas - Para ler um log do mais recente primeiro, use o
tac. Otailmostra o final na ordem original