Pretraga teksta u Linux fajlovima
Nekada je potrebno da pronađete fajl koji sadrži neki određeni string ili da pronađete liniju u fajlu koja sadrži neku reč. U Linux-u to možete da uradite korišćenjem jednog jednostavnog ali moćnog alata. U pitanju je grep. Mi ćemo u ovom tekstu pokazati kako da ga koristite za pretragu teksta u Linux fajlovima koristeći sve raspoložive opcije koje grep nudi.
Šta je grep?
Grep komanda (skraćeno od Global Regular Expression Print) je jedna od najpopularnijih komandi u Linux terminalu koji je deo GNU projekta. Pre svega u pitanju je veoma moćan alat koji korisnicima omogućava da slažu i filtriraju tekst po složenim pravilima.
To omogućava njegovu široku primenu kod rešavanja različitih problema. Grep se najčešće koristi za pronalaženje istih stringova u tekstu ili sadržaja u fajlovima, ali takođe može biti korišćen za obavljanje pretrage po nekom obrascu ili po regularnim izrazima (regular espressions). Na taj način možete jednostavno i brzo pronaći neku liniju u fajlu, pronaći tekst u fajlu ili filtrirati samo nekoliko željenih linija iz izlaza komande.
Hajde sada da vidimo kako možemo da koristimo grep komandu.
Grep sintaksa
Sintaksa komandne linije je sledeća:
$ grep [options] template [filename …]
Options predstavlja dodatne parametre koji određuju različita podešavanja, pretragu i izlaz, kao na primer broj redova ili inversion mode.
Template je neki string ili regularni izraz koji pretražujete.
Filename i komanda je lokacija na kojoj se radi pretraga. Kao što ćete kasnije u tekstu videti, grep omogućava pretragu u nekoliko fajlova.
Kao što iz prethodno navedenog možete videti, grep ne služi samo za pretragu u Linux fajlovima, već takođe može filtrirati standardni izlaz, što je vrlo zgodna funkcija kada je potrebno da selektujete samo greške iz loga ili pronađete process PD (PID).
Grep takođe ima i dosta raspoloživih opcija koje mogu biti korišćene prilikom pretrage teksta. U primerima koji slede mi ćemo obraditi samo deo tih opcija.
Pretraga teksta u fajlovima
U prvom primeru ćemo tražiti korisnika pod nazivom User u Linux password fajlu:
grep User /etc/passwd
Kao rezultat dobićemo nešto slično ovome, naravno samo sa pravim imenima korisnika:
User:x:1000:1000:User,,,:/home/User:/bin/bash
Ukoliko u pretrazi želite da isključite case sensitive, možete koristiti opciju -i.
grep -i «user» /etc/passwd
Regularni izrazi u grep-u
Regularni izrazi značajno proširuju funkcionalnost grep-a u delu pretrage teksta u fajlovima. Da biste aktivirali mod pretrage pomoću regularnih izraza potrebno je da dodate opciju -e. Evo i nekoliko konkretnih primera:
Radimo pretragu ulaza na početku linije uz pomoć specijalnog karaktera “^”. Na primer prikazaćemo sve poruke za mesec januar:
grep «^Jan 10» messages.1
Jan 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Jan 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Pretraga na kraju linije korišćenjem specijalnog karaktera “$”:
grep «terminating.$» messages
Jan 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Dec 28 06:29:54 cloneme kernel: Kernel log daemon terminating.
Sada tražimo sve linije koje sadrže brojeve:
grep «[0-9]» /var/log/Xorg.0.log
Korišćenje regularnih izraza sa grep komandom ima veoma široku primenu, pa ćemo se zato ovde zaustaviti sa već nekoliko navedenih primera.
Rekurzivna pretraga
Ukoliko je potrebno da vršite grep pretragu u nekoliko fajlova u okviru istog direktorijuma, na primer i Apache konfiguracionim fajlovima /etc/apache2/ koristićete rekurzivnu pretragu. Da biste omogućili rekurzivnu pretragu u grep-u koristite opciju -r. Sledeća komanda će pretražiti tekst u Linux fajlovima u svim poddirektorijumima /etc/apache2 u potrazi za stringom mojdomen.rs
grep -r «mojdomen.rs /etc/apache2/
Na izlazu ćete dobiti:
grep -r «zendsite» /etc/apache2/
/etc/apache2/vhosts.d/zendsite_vhost.conf: ServerName zendsite.localhost
/etc/apache2/vhosts.d/zendsite_vhost.conf: DocumentRoot /var/www/localhost/htdocs/zendsite
/etc/apache2/vhosts.d/zendsite_vhost.conf:<Directory /var/www/localhost/htdocs/zendsite>
Pretraga jedne reči
Kada pretražujete neki string (na primer abc), grep će ga vratiti u različitim kombinacijama. Tako možete dobiti dobiti rezultat: kbabc, abc123, afabc32 i slično. Znači u svim kombinacijama koje sadrže abc u nizu. Naravno, možete naterati grep da pretražuje tačno onaj sadržaj koji želite:
grep -w «abc» filename
Pretraga više reči
Možete pretraživati sadržaj i na više od jedne reči. Za takvu pretragu koristićete egrep komandu:
egrep -w ‘word1|word2’ /path/to/file
Rad sa stringovima
Grep takođe može da vam pokaže koliko puta se neki string javlja u nekom fajlu. Za to ćete korisiti -c (counter) opciju:
grep -c ‘word’ /path/to/file
Sa opcijom -n možete izbaciti broj linije u kojoj je pronađen traženi string:
grep -n ‘root’ /etc/passwd
Tako dobijamo:
1:root:x:0:0:root:/root:/bin/bash
Invertovana pretraga
Ova komanda može biti korišćena i za pretragu stringova koji ne sadrže određenu reč. Evo jednog primera takve pretrage korišćenjem opcije -v:
grep -v rec /path/to/file
Kao što ste videli grep je vrlo korisna komanda i korišćenjem njenih opcija možete značano proširiti njenu funkcionalnost. Mi smo na današnjim primerima pokazali samo neke načine na koje ona može biti korišćena, a za detaljnije informacije o načinima na koje sve može biti korišćena možete konsultovati linkove na koje smo vas uputili u tekstu.
Bez komentara