La comanda tac mostra un fitxer de l’última línia a la primera. El nom és cat al revés, i fa just el contrari que cat. És útil sobretot amb fitxers de registre, on les entrades més noves són al final: amb tac les tens a dalt de tot.
Sintaxi
tac [opcions] [fitxer...]
Si no li passes cap fitxer, llegeix de l’entrada estàndard. Forma part de les GNU coreutils.
Opcions
| Opció | Què fa |
|---|---|
-s cadena | Fa servir cadena com a separador en lloc del salt de línia |
-r | Interpreta el separador com a expressió regular |
-b | Posa el separador davant de cada tros en lloc de darrere |
Exemples
Invertir un fitxer
$ cat registre.log
2026-10-01 inici
2026-10-02 error disc
2026-10-03 aturada
$ tac registre.log
2026-10-03 aturada
2026-10-02 error disc
2026-10-01 inici
Trobar l’últim error d’un registre
grep -m1 s’atura a la primera coincidència. Si li passes el fitxer invertit, aquesta és la més recent:
$ tac registre.log | grep -m1 error
2026-10-02 error disc
En un registre gran, això és molt més ràpid que fer grep de tot el fitxer i quedar-te amb l’última línia, perquè tac llegeix el fitxer des del final i grep s’atura de seguida.
Els registres de systemd
Els registres del sistema que gestiona systemd no són fitxers de text, i no els pots llegir amb tac. Per veure’ls del més nou al més antic, journalctl té la seva pròpia opció:
journalctl -r
Diversos fitxers
Amb més d’un fitxer, tac inverteix cadascun per separat i els mostra en l’ordre en què els has escrit. No inverteix el conjunt:
$ printf 'a\nb\n' > p1; printf 'c\nd\n' > p2
$ tac p1 p2
b
a
d
c
Si vols el conjunt invertit, uneix-los primer: cat p1 p2 | tac.
Un separador diferent
Amb -s pots invertir trossos separats per qualsevol cadena:
$ printf 'u,dos,tres,' | tac -s ,
tres,dos,u,
tac o tail?
Per veure les últimes línies d’un fitxer, la comanda adequada és tail, que les mostra en l’ordre original. tac fitxer | head -n 10 també et dona les 10 últimes, però de baix a dalt. Fes servir tac quan vulguis justament aquest ordre invers.
A la versió anterior d’aquest article hi havia un exemple per eliminar línies amb tac | grep -v | tac: el resultat és el mateix que grep -v sol, de manera que els dos tac sobren.
Comandes relacionades
cat: mostrar i unir fitxers en l’ordre normal.tailihead: les últimes i les primeres línies.grep: buscar text.- Manipular text amb les GNU textutils, entre elles
sort -rper ordenar a l’inrevés.