Linux grep naredba koristi se kao metoda za filtriranje unosa. GREP označava Global Regular Expression Printer i stoga, kako bi ga učinkovito iskoristili, trebali biste imati neko znanje o regularnim izrazima.
U ovom ćete članku naučiti nekoliko primjera koji će vam pomoći da razumijete grep naredbu.
01 od 09Kako tražiti string u datoteci pomoću GREP
Zamislite da imate tekstualnu datoteku koja se zove knjiga sa sljedećim dječjim naslovima:
- Robin Hood
- Crvenkapica
- Petar Pan
- Zlatokosa i tri medvjeda
- Snjeguljica i sedam patuljaka
- Pinnochio
- Mačak u šeširu
- Tri mala praščića
- Gruffalo
- Charlie i tvornica čokolade
Da biste pronašli sve knjige s riječi "The" u naslovu, upotrijebite sljedeću sintaksu:
grep KnjigeVratit će se sljedeći rezultati:
- Zlatokosa i tri medvjeda
- Snjeguljica i sedam patuljaka
- Mačak u šeširu
- Tri mala praščića
- Gruffalo
- Charlie i tvornica čokolade
U svakom slučaju, riječ "The" bit će istaknuta.
Pretraga je osjetljiva na veličinu slova tako da ako jedan od naslova ima "umjesto", onda se ne bi vratio.
Za zanemarivanje slučaja možete dodati sljedeću sklopku:
zalijepite knjige - slučajni slučajTakođer možete koristiti sklopku -i na sljedeći način:
Nastavite čitati ispod
02 od 09Tražite niz u datoteci pomoću znakova
Grep naredba je vrlo moćna. Pomoću mnoštva tehnika podudaranja uzoraka možete filtrirati rezultate.
U ovom primjeru pokazat ću vam kako tražiti niz u datoteci pomoću zamjenskih znakova.
Zamislite da imate datoteku koja se zove mjesta sa sljedećim škotskim imenima mjesta:
AberdeenAberystwythaberlourInverurieInvernessNewburghnovi jeleninovo gallowayGlazgovEdinburgAko želite pronaći sva mjesta s inv u ime upotrijebite sljedeću sintaksu:
grep inver * mjestaZvjezdica zvjezdice (*) označava 0 ili više. Stoga, ako imate mjesto zvan inver ili mjesto zvan Inverness, obojica će se vratiti.
Još jedna zamjenska kartica koju možete koristiti jest razdoblje (.). To možete upotrijebiti za odgovaranje na jedno slovo.
grep inver.r mjestaGornja naredba bi pronašla mjesta zvane inverurije i inververne, ali ne bi imala potencijal, jer postoji samo jedan zamjenski znak između dva r-a kako je označeno jednim razdobljem.
Razdoblje zamjenske kartice je korisno, ali može uzrokovati probleme ako ga imate kao dio teksta koji pretražujete.
Na primjer, pogledajte ovaj popis imena domena
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Da biste pronašli sve o .coms, možete samo pretražiti koristeći sljedeću sintaksu:
grep * about * imena domenaGornja naredba pada ako popis sadrži sljedeće ime:
- everydaylinuxuser.com/about.html
Stoga biste mogli probati sljedeću sintaksu:
grep * about.com domainnamesTo bi bilo dobro ako ne postoji domena sa sljedećim imenom:
aboutycom.comDa biste zaista tražili pojam about.com, trebali biste izbjeći točku na sljedeći način:
grep * about .com domainnamesKonačni zamjenski znak koji će vam pokazati je upitnik koji označava nulu ili jedan znak.
Na primjer:
grep? ber placenamesGornja naredba vratit će aberdeen, aberystwyth ili čak berwick.
Nastavite čitati ispod
03 od 09Pretraži žice na početku i kraju reda Koristeći grep
Simbol karat (^) i dolar ($) omogućuju vam pretraživanje uzoraka na početku i kraju linija.
Zamislite da imate datoteku koja se zove nogomet sa sljedećim timskim imenima:
- Blackpool
- Liverpool
- Manchester City
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
Ako biste željeli pronaći sve momčadi koje su započele s Manchesterom, upotrijebite sljedeću sintaksu:
grep ^ Manchester momčadiGornja naredba vratit će Manchester City i Manchester United, ali ne FC United Of Manchester.
Alternativno, možete pronaći sve momčadi koje završavaju s Unitedom koristeći sljedeću sintaksu:
grep United $ timoviGornja naredba će se vratiti u Manchester United i Newcastle United, ali ne i FC United Of Manchester.
04 od 09Brojanje broja podudarnosti Koristeći grep
Ako ne želite vratiti stvarne linije koje odgovaraju obrascu koristeći grep, ali samo želite znati koliko ima možete koristiti sljedeću sintaksu:
grep-c pattern inputfileAko je uzorak dvostruko podudaran onda bi se broj 2 vratio.
Nastavite čitati ispod
05 od 09Pronalaženje svih uvjeta koji se ne podudaraju koristeći grep
Zamislite da imate popis imena mjesta s navedenim zemljama kako slijedi:
- aberdeen u Škotskoj
- glasgow Škotska
- liverpool Engleska
- colwyn zaljevu
- London, Engleska
Možda ste primijetili da u kolwynskom zaljevu nema zemlje povezane s njom.
Da biste tražili sva mjesta u zemlji, možete upotrijebiti sljedeću sintaksu:
grep zemljišta $ mjestaRezultati se vraćaju u svim mjestima, osim u uvali Colwyn.
To očigledno funkcionira samo za mjesta koja završavaju u zemlji (gotovo znanstveno).
Možete preokrenuti odabir koristeći sljedeću sintaksu:
grep -v zemljišta $ mjestaTo bi otkrilo sva mjesta koja nisu završila sa zemljom.
06 od 09Kako pronaći prazne linije u datotekama Koristeći grep
Zamislite da imate ulaznu datoteku koju koristi aplikacija treće strane koja zaustavlja čitanje datoteke kada pronađe praznu liniju kako slijedi:
- aberdeen scotland
- Inverness Scotland
- liverpool england
- colwyn bay wales
Kada aplikacija dođe do linije nakon Liverpoola, prestat će čitati značenje koje se u potpunosti propušta.
Možete koristiti grep za traženje praznih redaka sa sljedećom sintaksom:
grep ^ $ mjestaNažalost, to nije osobito korisno jer samo vraća prazne crte.
Naravno, mogli biste računati broj praznih redaka kako biste vidjeli je li datoteka valjana kako slijedi:
grep -c ^ $ mjestaBilo bi, međutim, korisnije znati linije brojeve koji imaju prazan red tako da ih možete zamijeniti. To možete učiniti pomoću sljedeće naredbe:
grep -n ^ $ mjestaNastavite čitati ispod
07 od 09Kako pretražiti žice velikih ili malih slova Korištenje grep
Koristeći grep možete odrediti koji redovi u datoteci imaju velika slova koristeći sljedeću sintaksu:
grep 'A-Z' naziv datotekeKvadratne zagrade vam omogućuju određivanje raspona znakova. U gornjem primjeru odgovara bilo kojem znaku između A i Z.
Stoga da biste odgovarali malim slovima, možete upotrijebiti sljedeću sintaksu:
grep 'a-z' naziv datotekeAko želite podudarati samo slova, a ne numeričke ili druge simbole, koristite sljedeću sintaksu:
grep 'a-zA-Z' naziv datotekeIsto možete učiniti i sa brojevima kako slijedi:
grep '0-9' naziv datoteke 08 od 09Traženje ponovljenih uzoraka Koristeći grep
Možete koristiti kovrčaste zagrade {} da biste potražili uzorak koji se ponavlja.
Zamislite da imate datoteku s telefonskim brojevima kako slijedi:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Znate da prvi dio broja mora biti tri znamenke i želite pronaći retke koje ne odgovaraju ovom obrascu.
Iz prethodnog primjera znate da 0-9 vraća sve brojeve u datoteci.
U ovom slučaju želimo da linije počinju s tri brojeva, a zatim s crticom (-). To možete učiniti sa sljedećom sintaksom:
grep "^ 0-9 0-9 0-9 -" brojeviKao što znamo iz prethodnih primjera, karat (^) znači da linija mora početi sa sljedećim obrascem.
0-9 će tražiti bilo koji broj između 0 i 9. Budući da je to uključeno tri puta, odgovara 3 broja. Konačno, postoji crtica koja označava da crtica mora uspjeti tri broja.
Korištenjem kovrčastih zagrada možete smanjiti pretraživanje na sljedeći način:
grep "^ 0-9 {3 } -" brojeviSlash izbjegava {zaglavlje tako da djeluje kao dio regularnog izraza, no u biti ono što govori je 0-9 {3} što znači bilo koji broj između 0 i 9 tri puta.
Urezane zagrade također se mogu koristiti kako slijedi:
{5,10}{5,}{5,10} znači da se znak koji se traži mora biti ponovljen najmanje 5 puta, ali ne više od 10, dok {5,} znači da se znak mora ponoviti najmanje 5 puta, ali može biti više od toga.
Nastavite čitati ispod
09 od 09Korištenje izlaza iz drugih naredbi Koristeći grep
Do sada smo pregledali podudaranje uzoraka unutar pojedinačnih datoteka, ali grep može koristiti izlaz iz drugih naredbi kao ulaz za podudaranje uzoraka.
Dobar primjer toga je korištenje naredbe ps koja navodi aktivne procese.
Primjerice, pokrenite sljedeću naredbu:
ps -efPrikazuju se svi pokrenuti procesi na vašem sustavu.
Možete koristiti grep za traženje određenog procesa pokretanja kako slijedi:
ps -ef | grep firefoxSažetak
Grep naredba je temeljna Linux naredba i to je onaj koji je vrijedan učenja jer će vaš život učiniti mnogo lakšim kada traži datoteke i procese pri korištenju terminala.