Како користити команду рев на Линуку

Linux komanda rev obrće nizove teksta. Ova komanda može da radi sa datim tekstom ili fajlom, i na prvi pogled deluje prilično jednostavno. Međutim, kao i kod mnogih pomoćnih programa komandne linije, njena stvarna moć se otkriva tek kada se kombinuje sa drugim komandama.

Komanda rev je jedan od onih jednostavnih Linux alata koji na prvi pogled deluju kao nešto neobično. Ona obavlja jednu jedinu funkciju: obrće nizove. Osim što može da prikaže stranicu za brzu pomoć (-h) i da vam pokaže broj verzije (-V), ne prihvata nikakve druge opcije komandne linije.

Dakle, rev obrće stringove, i to je sve? Nema nikakvih varijacija ili opcija? Pa, i da i ne. Da, nema permutacija, ali ne, to nije sve. Ovaj vodič će vam pokazati kako je možete kombinovati za snažne operacije.

Kada rev koristite kao gradivni blok u složenijim sekvencama komandi, ona zaista počinje da pokazuje svoju vrednost. rev je jedna od onih komandi (kao što su tac i yes) koje olakšavaju stvari. Lakše je uvideti njihovu korisnost kada vidite kako druge komande čine efikasnijim.

Korišćenje komande rev

Kada se koristi u komandnoj liniji bez drugih parametara, rev prihvata bilo koji uneti tekst, obrće ga, a zatim ga ispisuje u prozoru terminala. To će raditi sve dok ne pritisnete Ctrl+C za izlaz.

rev

Ako unesete neki tekst i pritisnete Enter, rev će ispisati string u obrnutom smeru – osim ako mu ne prosledite palindrom, naravno.

Prosleđivanje teksta komandi rev

Možete koristiti echo da biste prosledili tekst u rev.

echo one two three | rev

Takođe, možete koristiti rev da biste obrnuli sadržaj cele tekstualne datoteke, red po red. U ovom primeru, imamo datoteku koja sadrži listu imena fajlova. Datoteka se zove „filelist.txt“.

rev filelist.txt

Svaki red se čita iz datoteke, obrće, a zatim se ispisuje u prozoru terminala.

Kombinovanje rev sa drugim komandama

Evo primera korišćenja cevovoda ulaza koji dva puta poziva rev.

Ova komanda uklanja poslednji znak iz niza teksta. Ovo bi moglo biti korisno za uklanjanje znakova interpunkcije. Moramo koristiti komandu cut da uklonimo karakter.

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

Hajde da ovo raščlanimo.

echo šalje string prvom pozivu rev.
rev obrće string i prosleđuje ga u cut.
Opcija -c (karakteri) govori cut da vrati niz karaktera iz stringa.
Opcija 2- kaže cut da vrati opseg karaktera od drugog karaktera do kraja reda. Ako je naveden drugi broj, kao što je 2-5, opseg bi bio od drugog do petog karaktera. Ne postojanje drugog broja znači „do kraja stringa“.
Obrnuti string – minus njegov prvi karakter – se prosleđuje rev koji obrće string, tako da se vraća u prvobitni redosled.

Pošto smo odsekli prvi znak obrnutog niza, odsekli smo poslednji znak originalnog niza. Da, ovo možete uraditi sa sed ili awk, ali ovo je lakša sintaksa.

Izdvajanje poslednje reči

Možemo koristiti sličan trik da vratimo poslednju reč reda.

Komanda je slična prethodnoj: ponovo koristi rev dva puta. Razlike se nalaze u načinu na koji se komanda cut koristi za odabir delova teksta.

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

Evo razlaganja komande:

echo šalje string prvom pozivu rev.
rev obrće string i prosleđuje ga u cut.
Opcija -d' ' (delimiter) govori cut da vrati niz karaktera ograničen razmakom.
Opcija -f1 govori cut da vrati prvi deo stringa koji ne sadrži graničnik. Drugim rečima, prvi deo rečenice do prvog razmaka.
Obrnuta prva reč se prosleđuje rev-u koji obrće string, tako da se vraća u prvobitni redosled.

Pošto smo izdvojili prvu reč iz obrnutog niza, odsekli smo poslednju reč originalnog niza. Poslednja reč rečenice je bila „word“ i ona je ispisana.

Isecanje sadržaja iz datoteka

Recimo da imamo datoteku koja sadrži listu imena fajlova, a imena fajlova su pod navodnicima. Želimo da uklonimo navodnike iz imena fajlova.

Pogledajmo fajl:

less filelist.txt

Sadržaj datoteke nam se prikazuje.

Možemo da uklonimo interpunkciju sa oba kraja svakog reda pomoću sledeće komande. Ova komanda koristi i rev i cut dva puta.

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

Imena fajlova su nam prikazana bez navodnika.

Komanda se razlaže na sledeći način:

rev obrće linije u datoteci i prosleđuje ih u cut.
Opcija -c (karakteri) govori cut da vrati niz karaktera iz svake linije.
Opcija 2- kaže cut da vrati opseg karaktera od drugog znaka do kraja svakog reda.
Obrnuti nizovi, minus njihovi prvi znakovi, se prosleđuju rev.
rev obrće stringove, tako da se vraćaju u prvobitni redosled. Zatim se seku po drugi put.
Opcija -c (karakteri) govori cut da vrati niz karaktera iz svakog stringa.
Opcija 2- kaže cut da vrati opseg karaktera od znaka dva do kraja svakog reda. Ovo „preskače“ vodeći znak navodnika, koji je znak jedan u svakom redu.

Mnogi cevovodi

Evo naredbe koja vraća sortiranu listu svih ekstenzija fajlova u trenutnom direktorijumu. Ona koristi pet različitih Linux komandi.

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

Proces je jednostavan:

ls navodi fajlove u trenutnom direktorijumu. Oni se prosleđuju u rev.
rev obrće imena fajlova i prosleđuje ih u cut.
cut vraća prvi deo svakog imena fajla do graničnika. -d'.' kaže cut da koristi tačku „.“ kao graničnik. Deo obrnutih imena fajlova do prve tačke su ekstenzije fajlova. Oni se prosleđuju u rev.
rev obrće ekstenzije fajlova u njihov originalni redosled. Oni su raspoređeni u sort.
sort sortira ekstenzije fajlova i prosleđuje rezultate u uniq.
uniq vraća jednu listu za svaki tip jedinstvene ekstenzije fajla. Imajte na umu da ako ne postoji ekstenzija fajla (kao što je makefile i direktorijumi Help i gc_help), navedeno je celo ime fajla.

Da biste ovo učinili još boljim, dodajte opciju komandne linije -c (count) komandi uniq.

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

Sada dobijamo sortiranu listu različitih tipova fajlova u trenutnom direktorijumu sa brojem svakog od njih.

To je prilično korisna jednoredna komanda!

Idemo unazad

Ponekad morate da idete unazad da biste išli napred. I obično najbrže napredujete kao deo tima.

Dodajte rev svom repertoaru komandi i uskoro ćete je koristiti da pojednostavite inače komplikovane sekvence komandi.