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