Jak korzystać z poleceń cat and tac w systemie Linux

Polecenia cat i tac wyświetlają zawartość plików tekstowych, ale mają znacznie więcej do zaoferowania. Zanurz się głębiej i odkryj produktywne sztuczki wiersza poleceń Linuksa.

To dwa proste polecenia, które często są ignorowane jako zbyt podstawowe, aby miały jakiekolwiek realne zastosowanie. Jednak po zapoznaniu się z różnymi sposobami ich użycia, zobaczysz, że doskonale radzą sobie z pracą z plikami.

Komenda cat

Polecenie cat jest używane do badania zawartości plików tekstowych oraz łączenia ich w większe pliki.

W przeszłości, w erze dial-up modemów, pliki binarne często były dzielone na mniejsze części, aby ułatwić ich pobieranie. Zamiast pobierać jeden duży plik, użytkownicy ściągali mniejsze pliki. Jeśli jeden z nich nie pobrał się poprawnie, wystarczyło pobrać go ponownie.

Aby połączyć mniejsze pliki w jeden działający plik binarny, wymagana była metoda ich łączenia, znana jako konkatenacja. Stąd wzięła się nazwa cat.

Współczesne połączenia szerokopasmowe sprawiły, że ta potrzeba zanikła, ale cat wciąż ma wiele zastosowań.

Wyświetlanie pliku tekstowego

Aby wyświetlić zawartość pliku tekstowego w terminalu, użyj poniższego polecenia:

cat poem1.txt

Zawartość pliku poem1.txt jest wyświetlana w terminalu.

To tylko połowa znanego wiersza. Gdzie reszta? Jest tutaj inny plik o nazwie poem2.txt. Możemy użyć cat, aby wyświetlić zawartość wielu plików jednocześnie, po prostu wymieniając je w wierszu poleceń.

cat poem1.txt poem2.txt

Wygląda lepiej; mamy teraz cały wiersz.

Używanie cat z less

Jeśli treść przeszła przez terminal zbyt szybko, możemy przesłać dane wyjściowe z cat do less i przewijać tekst w dół we własnym tempie.

cat poem1.txt poem2.txt | less

Możemy teraz poruszać się wstecz i do przodu w tekście w jednym strumieniu, nawet jeśli jest on przechowywany w dwóch osobnych plikach tekstowych.

Numerowanie wierszy w pliku

Możemy numerować linie w pliku, gdy są wyświetlane, korzystając z opcji -n.

cat -n poem1.txt

Linie są teraz numerowane w terminalu.

Nie numeruj pustych wierszy

Możemy ponumerować wiersze w pliku, ale także puste wiersze będą numerowane. Aby numerować tylko wiersze tekstu, użyj opcji -b.

cat -b poem1.txt

Teraz wiersze tekstu są numerowane, a puste wiersze są pomijane.

Nie pokazuj wielu pustych wierszy

Jeśli w pliku znajdują się sekcje kolejnych pustych linii, możemy poprosić cat, aby zignorował wszystkie z wyjątkiem jednej pustej linii. Użyj opcji -s (squeeze-blank).

cat -s poem1.txt

Nie wpływa to na zawartość pliku; zmienia tylko sposób wyświetlania pliku przez cat.

Wyświetl karty

Aby sprawdzić, czy w pliku są spacje czy tabulatory, użyj opcji -T (show-tabs).

cat -T poem1.txt

Zakładki są reprezentowane przez znaki „^I”.

Wyświetlanie końców linii

Aby sprawdzić, czy na końcu linii znajdują się białe znaki, użyj opcji -E (show-end).

cat -E poem1.txt

Końce wierszy są reprezentowane przez znak „$”.

Łączenie plików

Łączenie wierszy w dwóch plikach, po jednej połowie w każdym, nie ma sensu. Połączmy je razem, tworząc nowy plik z całym wierszem.

cat poem1.txt poem2.txt > jabberwocky.txt

Sprawdźmy nasz nowy plik:

cat jabberwocky.txt

Dołączanie tekstu do istniejącego pliku

Teraz mamy pełny wiersz, ale brakuje ostatniego wersetu, który jest taki sam jak pierwszy. Jeśli mamy pierwszą zwrotkę w pliku, możemy ją dodać na końcu pliku jabberwocky.txt.

Aby to zrobić, użyjemy >> zamiast . Użycie tylko > nadpisze plik jabberwocky.txt, co nie jest naszym celem. Chcemy dołączyć tekst na końcu.

cat first_verse.txt >> jabberwocky.txt

Sprawdźmy zawartość pliku jabberwocky.txt:

cat jabberwocky.txt

Przekierowanie stdin

Możesz przekierować dane wejściowe z klawiatury do pliku za pomocą cat. Wszystko, co wpiszesz, jest przekierowywane do pliku, aż naciśniesz Ctrl + D. Używamy tutaj pojedynczego >, ponieważ chcemy utworzyć nowy plik (lub nadpisać go, jeśli już istnieje).

cat > my_poem.txt

Możemy zacząć pisać, gdy tylko wydamy polecenie. Gdy skończymy, naciskamy Ctrl + D. Następnie możemy sprawdzić zawartość nowego pliku:

cat my_poem.txt

Ten dźwięk, jak odległa turbina, to prawdopodobnie Lewis Carroll wirujący w swoim grobie.

Polecenie tac

Polecenie tac jest podobne do cat, ale wyświetla zawartość plików w odwrotnej kolejności.

Spróbujmy:

tac my_poem.txt

Plik jest teraz wyświetlany w odwrotnej kolejności. W tym przypadku nie wpływa to na jego wartość literacką.

Używanie tac ze stdin

Użycie tac bez podawania nazwy pliku spowoduje, że będzie on działał na wejściu z klawiatury. Naciśnięcie Ctrl + D zakończy wprowadzanie, a tac wyświetli wszystko, co wpisałeś w odwrotnej kolejności.

tac

Po naciśnięciu Ctrl + D dane wejściowe są odwracane i wyświetlane w terminalu.

Używanie tac z plikami dziennika

Oprócz prostych zastosowań, tac może być użyteczne. Wiele plików dziennika dołącza swoje najnowsze wpisy na końcu pliku. Używając tac (i, wbrew intuicji, head), możemy wyświetlić ostatni wpis w oknie terminala.

Użyjemy tac, aby wyświetlić plik /var/log/syslog w odwrotnej kolejności, a następnie przekażemy go do head, aby wydrukować tylko pierwszą linię (która dzięki tac jest ostatnią linią w pliku).

tac /var/log/syslog | head -1

Polecenie head drukuje ostatni wpis z pliku syslog, a następnie kończy działanie.

Warto zauważyć, że head drukuje tylko jedną linię – jak prosiliśmy – ale linia ta jest tak długa, że ​​zawija się na terminalu.

Używanie tac z rekordami tekstowymi

Ostatnią sztuczką, jaką tac ma w rękawie, jest przetwarzanie plików tekstowych w oparciu o inne delimitery.

Możemy użyć tac do przetwarzania plików tekstowych, traktując „fragmenty” danych jako rekordy. Załóżmy, że mamy plik dziennika, który musimy przeanalizować. Zobaczmy jego format, używając less.

less logfile.dat

Jak widać, plik ma powtarzalny format. Istnieją sekwencje trzech wierszy szesnastkowych wartości, a każdy zestaw zaczyna się od wiersza etykiety.

Jeśli przewiniemy do końca pliku, zobaczymy, że jest ich wiele. Ostatnia ma numer 865.

Załóżmy, że musimy przetwarzać ten plik w odwrotnej kolejności, zachowując porządek trzech wierszy w każdym rekordzie.

Użyjmy tac, aby odwrócić plik, ale musimy zachować oryginalny porządek danych w rekordach.

tac logfile.dat | less

Wcześniej zauważyliśmy, że ostatnie trzy wiersze zaczynają się od wartości szesnastkowych 93, E7 i B8, w tej kolejności.

tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | less

Opcja -s (separator) informuje tac, co traktować jako separator między rekordami. Opcja -r (regex) mówi, aby traktować separator jako wyrażenie regularne.

Opcja -b (before) powoduje, że tac wyświetla separator przed każdym rekordem.

Ciąg -s ^=SEQ.+[0-9]+*$ instruuje tac, aby szukał każdego wystąpienia „= SEQ” na początku wiersza, po którym następuje sekwencja cyfr.

Jak zwykle, wprowadzamy wszystko do less.

Teraz nasz plik jest przedstawiony w odwrotnej kolejności, z każdą linią etykiety „= SEQ” wyświetlaną przed trzema liniami danych szesnastkowych, które są w oryginalnej kolejności.

Kiedy sprawdzimy, pierwsza wartość z pierwszych trzech wierszy szesnastkowych odpowiada wartościom, które zapisaliśmy wcześniej: 93, E7 i B8, w tej kolejności.

Wszystko ma swój cel

W świecie Linuksa nawet najprostsze polecenia i narzędzia mogą mieć zaskakujące i potężne właściwości.

Filozofia projektowania prostych narzędzi które dobrze robią jedną rzecz oraz współpracują z innymi narzędziami przyczyniła się do powstania takich poleceń jak tac. Na pierwszy rzut oka mogą wydawać się trywialne, ale po głębszej analizie odkryjesz ich nieoczekiwaną moc, którą możesz wykorzystać na swoją korzyść.

Jak mówi jedno z powiedzeń: „Nie gardź wężem, który nie ma rogów, bo któż wie, czy nie stanie się smokiem?”


newsblog.pl