tac

Wyświetla zawartość pliku w odwrotnej kolejności linii (od końca).

tac to narzędzie z pakietu GNU coreutils, które wypisuje zawartość pliku w odwrotnej kolejności linii — od ostatniej do pierwszej. Nazwa to po prostu cat napisane wspak, i dokładnie na tym polega jej rola: cat skleja i wypisuje pliki od góry, tac robi to od dołu. Przydaje się, kiedy chcesz zobaczyć najnowsze wpisy w logu na samej górze, odwrócić kolejność jakiejś listy albo przetworzyć plik od końca bez kombinowania z sort.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: tac [opcje] [plik...]. Jeśli nie podasz pliku (albo podasz -), tac czyta ze standardowego wejścia, więc świetnie działa w potoku.

  • -b, --before — dokleja separator przed rekordem zamiast po nim (domyślnie separator jest na końcu linii).
  • -r, --regex — traktuje separator jako wyrażenie regularne, a nie zwykły tekst.
  • -s STRING, --separator=STRING — używa podanego STRING jako separatora rekordów zamiast domyślnego znaku nowej linii.
  • --help — wyświetla krótką pomoc i kończy działanie.
  • --version — pokazuje wersję (przydatne, gdy sprawdzasz, czy w ogóle masz coreutils).

Przykłady użycia

  • tac plik.txt — wypisuje plik.txt od ostatniej linii do pierwszej.
  • tac /var/log/syslog | head — pokazuje najnowsze wpisy loga na samej górze, bez przewijania całego pliku.
  • cat plik1 plik2 | tac — skleja dwa pliki, a potem odwraca całość liniami.
  • tac -s ',' lista.txt — odwraca elementy rozdzielone przecinkami zamiast liniami (przyda się do jednolinijkowych list).
  • tac -r -s '^Rekord' dane.txt — traktuje każdą sekcję zaczynającą się od słowa Rekord jako osobny blok i odwraca ich kolejność (separator jako regex).

Częste błędy i pułapki

tac odwraca kolejność linii, a nie znaki w liniach — jeśli chcesz odwrócić tekst w poziomie, potrzebujesz rev. To dwa różne narzędzia, mimo podobnej intuicji.

Druga pułapka: tac to część GNU coreutils, więc jest domyślnie na Linuksie, ale nie ma go standardowo na macOS ani w klasycznym BSD. Na Macu doinstalujesz je przez brew install coreutils (często pod nazwą gtac) albo zastąpisz go tail -r, które robi podobną robotę.

Pamiętaj też o różnicy między -s a -r: bez -r separator jest brany dosłownie, więc znaki specjalne regexa nie zadziałają jak wzorzec. Jeśli plik nie kończy się znakiem nowej linii, ostatni „rekord” i tak zostanie potraktowany poprawnie — tac radzi sobie z tym lepiej niż niejedno domowe rozwiązanie na sort.

Powiązane komendy: cat, rev, tail, head, sort, sed.