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.