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 podanegoSTRINGjako 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— wypisujeplik.txtod 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łowaRekordjako 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.