Jak korzystać z polecenia rev w systemie Linux

Polecenie rev Linuksa odwraca ciągi tekstu. To polecenie może działać na podanym tekście lub pliku i wydaje się zwodniczo proste. Ale podobnie jak wiele narzędzi wiersza poleceń, jego prawdziwa moc staje się widoczna, gdy połączysz go z innymi poleceniami.

Polecenie rev jest jednym z tych prostych narzędzi Linuksa, które na pierwszy rzut oka wydają się być czymś dziwnym. Pełni jedną funkcję: odwraca ciągi znaków. Oprócz możliwości wydrukowania strony szybkiej pomocy (-h) i pokazania numeru wersji (-V), nie akceptuje żadnych opcje wiersza poleceń.

Więc rev odwraca struny i to wszystko? Brak wariantów lub opcji? Cóż, tak i nie. Tak, nie ma permutacji, ale nie, to prawie wszystko. Ten samouczek pokazuje, jak połączyć go w celu uzyskania zaawansowanych operacji.

Kiedy używasz rev jako budulca w bardziej skomplikowanych sekwencjach poleceń, naprawdę zaczyna się pokazywać. rev jest jednym z grupy poleceń (takich jak tac i yes), które są pomocnikami. Łatwiej jest docenić ich przydatność, gdy zobaczysz, jak wydajniej wykorzystują inne polecenia.

Korzystanie z polecenia rev

Użyty w wierszu poleceń bez innych parametrów, rev pobiera wpisane dane wejściowe, odwraca je, a następnie wyświetla w oknie terminala. Robi to, dopóki nie naciśniesz Ctrl + C, aby wyjść.

rev

Jeśli wpiszesz jakiś tekst i naciśniesz Enter, spowoduje to, że rev wydrukuje ciąg w odwrotnej kolejności – chyba że podasz mu rozszerzenie palindrom, oczywiście.

Przekazywanie tekstu do rew

Możesz użyć echa, aby przesłać tekst do rev.

echo one two three | rev

Możesz także użyć rev, aby odwrócić zawartość całego pliku tekstowego, wiersz po wierszu. W tym przykładzie mamy plik zawierający listę nazw plików. Plik nosi nazwę „filelist.txt”.

rev filelist.txt

Każda linia jest odczytywana z pliku, odwracana, a następnie drukowana w oknie terminala.

Łączenie rev z innymi poleceniami

Oto przykład użycia potoku wejściowego, który dwukrotnie wywołuje rev.

To polecenie usuwa ostatni znak z ciągu tekstu. Może to być przydatne do usunięcia interpunkcji. Musimy użyć polecenia cut, aby usuń znak.

echo 'Remove punctuation.' | rev | cut -c 2- | rev

Rozbijmy to.

echo wysyła łańcuch do pierwszego wywołania rev.
rev odwraca strunę i wprowadza ją do cięcia.
Opcja -c (znaki) nakazuje cutowi zwrócić sekwencję znaków z łańcucha.
Opcja 2- mówi cutowi, aby zwracał zakres znaków od drugiego znaku do końca linii. Jeśli podano drugą liczbę, na przykład 2-5, zakres będzie obejmował od dwóch do pięciu znaków. Brak drugiej liczby oznacza „do końca ciągu”.
Odwrócony łańcuch – bez pierwszego znaku – jest przekazywany do rev, który odwraca łańcuch, więc wraca do swojej pierwotnej kolejności.

Ponieważ usunęliśmy pierwszy znak z odwróconego łańcucha, usunęliśmy ostatni znak oryginalnego ciągu. Tak, możesz to zrobić za pomocą sed lub awk, ale jest to łatwiejsza składnia.

Oddzielenie ostatniego słowa

Możemy użyć podobnej sztuczki, aby zwrócić ostatnie słowo wiersza.

Polecenie jest podobne do ostatniego: ponownie używa obrotów dwukrotnie. Różnice polegają na sposobie użycia polecenia Wytnij do zaznaczenia fragmentów tekstu.

echo 'Separate the last word' | rev | cut -d' ' -f1 | rev

Oto podział poleceń:

echo wysyła łańcuch do pierwszego wywołania rev.
rev odwraca strunę i wprowadza ją do cięcia.
Opcja -d ” (separator) mówi cutowi, aby zwrócił sekwencję znaków rozdzielonych spacją.
Opcja -f1 nakazuje cutowi zwrócić pierwszą sekcję łańcucha niezawierającego separatora. Innymi słowy, od pierwszej części zdania do pierwszej spacji.
Odwrócone pierwsze słowo jest przekazywane do rev, które odwraca łańcuch, więc wraca do swojej pierwotnej kolejności.

Ponieważ wyodrębniliśmy pierwsze słowo z odwróconego ciągu, odcięliśmy ostatnie słowo oryginalnego ciągu. Ostatnim słowem zdania było „słowo” i zostało ono wydrukowane dla nas.

Przycinanie zawartości z plików

Powiedzmy, że mamy plik zawierający listę nazw plików, a nazwy plików są w cudzysłowie. Chcemy usunąć cudzysłowy z nazw plików.

Spójrzmy na plik:

less filelist.txt

Zawartość pliku jest wyświetlana dla nas w mniej.

Zawartość nazw plików.txt w mniej w oknie terminala.

Możemy usunąć znaki interpunkcyjne z obu końców każdego wiersza za pomocą następującego polecenia. To polecenie używa dwukrotnie obrotu i cięcia.

rev filelist.txt | cut -c 2- | rev | cut -c 2-

Nazwy plików są wymienione dla nas bez cudzysłowów.

Nazwy plików bez cudzysłowów w oknie terminala.

Polecenie psuje się w ten sposób:

rev odwraca linie w pliku i umieszcza je w przekroju.
Opcja -c (znaki) nakazuje cutowi zwrócić sekwencję znaków z każdego wiersza.
Opcja 2- mówi cutowi, aby zwracał zakres znaków od drugiego znaku do końca każdego wiersza.
Odwrócone łańcuchy, bez ich pierwszych znaków, są przekazywane do rev.
rev odwraca struny, więc wracają do swojej pierwotnej kolejności. Po raz drugi są podłączeni do cięcia.
Opcja -c (znaki) mówi cutowi, aby zwrócił sekwencję znaków z każdego łańcucha.
Opcja 2- mówi cutowi, aby zwracał zakres znaków od drugiego znaku do końca każdego wiersza. To „przeskakuje” wiodący cudzysłów, który jest jednym znakiem w każdym wierszu.

Dużo rur

Oto polecenie, które zwraca posortowaną listę wszystkich rozszerzeń plików w bieżącym katalogu. Używa pięciu różnych poleceń Linuksa.

ls | rev | cut -d'.' -f1 | rev | sort | uniq

Proces jest prosty:

ls wyświetla pliki w bieżącym katalogu. Te są podłączone do rev.
rev odwraca nazwy plików i przekierowuje je do cięcia.
cut zwraca pierwszą część każdej nazwy pliku do separatora. -D ’.’ każe cutowi użyć kropki „.” jako separator. Część odwróconych nazw plików do pierwszego okresu to rozszerzenia plików. Te są podłączone do rev.
rev odwraca rozszerzenia plików do ich pierwotnej kolejności. Są ułożone rurami w sortowanie.
sort sortuje rozszerzenia plików i przekazuje wyniki do uniq.
uniq zwraca jedną listę dla każdego typu unikalnego rozszerzenia pliku. Zauważ, że jeśli nie ma rozszerzenia pliku (takiego jak makefile, katalogi Help i gc_help), wyświetlana jest cała nazwa pliku.

Aby nadać temu ostateczny szlif, dodaj opcję wiersza poleceń -c (count) do polecenia uniq.

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

Otrzymujemy teraz posortowaną listę różnych typów plików w bieżącym katalogu wraz z liczbą każdego z nich.

To całkiem fajna jedna linijka!

drawroF og ot drawkcaB gnioG

Czasami trzeba cofnąć się, aby iść do przodu. Zwykle najszybciej idziesz do przodu jako członek zespołu.

Dodaj rev do swojego repertuaru poleceń, a wkrótce będziesz go używać do upraszczania skomplikowanych sekwencji poleceń.