rev

Odwraca kolejność znaków w każdej linii pliku lub wejścia.

rev to malutkie narzędzie z pakietu util-linux, które odwraca kolejność znaków w każdej linii. Bierze plik (albo strumień ze standardowego wejścia), kopiuje go na standardowe wyjście i każdą linię „obraca” od końca: ostatni znak wędruje na początek, pierwszy na koniec. Litera w środku linii zostaje na swoim miejscu, bo rev działa znak po znaku, a nie wyraz po wyrazie. Brzmi jak gadżet do zabawy i często nim jest, ale przydaje się też w prawdziwej robocie: do odwracania pól, sztuczek z cut liczonym od końca i szybkiego podglądania końcówek długich linii.

Składnia i najważniejsze opcje

Podstawowa forma jest banalna: rev [opcje] [plik...]. Bez podanego pliku rev czyta ze standardowego wejścia, więc świetnie wpina się w potok.

  • -0, --zero — używa bajtu zerowego (\0) jako separatora linii zamiast znaku nowej linii; przydatne przy danych z find -print0.
  • -h, --help — wyświetla krótką pomoc i kończy działanie.
  • -V, --version — pokazuje wersję narzędzia i kończy działanie.

I tyle. rev nie ma rozbudowanego zestawu flag, bo robi dokładnie jedną rzecz. Działa liniowo i trzyma całą linię w pamięci, więc plik bez żadnych znaków nowej linii potrafi zjeść RAM.

Przykłady użycia

  • echo "terminal" | rev — wypisuje lanimret, czyli klasyczny test, że rev w ogóle działa.
  • rev plik.txt — odwraca każdą linię pliku i wypisuje wynik na ekran (oryginał zostaje nietknięty).
  • echo "/var/log/syslog" | rev | cut -d/ -f1 | rev — wyciąga ostatni segment ścieżki (syslog), bo podwójne rev pozwala cut liczyć pola od końca.
  • rev plik.txt > odwrocony.txt — zapisuje odwrócony tekst do nowego pliku. Nie przekierowuj do tego samego pliku, bo go wyzerujesz.
  • cat dane.txt | rev | sort | rev — sortuje linie po ich końcówkach (np. po rozszerzeniach albo sufiksach domen), a potem przywraca normalny zapis.

Częste błędy i pułapki

Najpopularniejsze nieporozumienie: rev nie odwraca kolejności linii w pliku — od tego jest tac. rev obraca znaki wewnątrz linii, tac obraca kolejność całych wierszy. Druga klasyczna wpadka to rev plik > plik — powłoka opróżnia plik, zanim rev zdąży go przeczytać, i zostajesz z pustką. Zawsze zapisuj do nowej nazwy.

Pamiętaj też, że rev liczy znaki, a nie bajty. W nowszych wersjach util-linux ze świadomością kodowania odwracanie znaków UTF-8 (np. polskich „ł”, „ż”) działa poprawnie, ale na egzotycznych albo źle ustawionych locale wieloznakowe symbole potrafią się rozjechać. Opcja --zero jest stosunkowo świeżym dodatkiem — na bardzo starych systemach jej nie znajdziesz, więc sprawdź rev --version.

Powiązane komendy: tac (odwraca kolejność linii), cut (wycinanie pól i kolumn), tr (zamiana i usuwanie znaków), awk (przetwarzanie pól tekstu), fold (zawijanie długich linii).