Uvod
Komanda Linux grep se koristi kao metoda za filtriranje unosa.
GREP označava Global Regular Expression Printer i zbog toga, kako bi je efikasno iskoristili, trebali biste imati malo znanja o regularnim izrazima.
U ovom članku ću vam pokazati niz primera koji će vam pomoći da razumete grep naredbu.
01 od 09
Kako tražiti string u fajlu koristeći GREP
Zamislite da imate tekstualnu datoteku zvanu knjige sa sledećim naslovima za djecu:
- Robin Hood
- Crvenkapica
- Petar Pan
- Goldilocks i The Three Medvedi
- Snežana i sedam patuljaka
- Pinnochio
- Mačka u šeširu
- Tri male svinje
- Gruffalo
- Charlie i Fabrika čokolade
Da biste sve naslove pronašli uz reč "The" u naslovu, koristićete sledeću sintaksu:
grep Knjige
Sljedeći rezultati će biti vraćeni:
- Goldilocks i The Three Medvedi
- Snežana i sedam patuljaka
- Mačka u šeširu
- Tri male svinje
- Gruffalo
- Charlie i Fabrika čokolade
U svakom slučaju, reč "The" će biti označena.
Imajte na umu da je pretraga osjetljiva na velika i mala slova, pa ako je jedan od naslova imao "umjesto" The "onda ne bi bio vraćen.
Da ignorišete slučaj možete dodati sljedeći prekidač:
grep knjige - igranje igara
Takođe možete koristiti i -i prekidač na sledeći način:
grep-i knjige
02 od 09
Potražite string u datoteci koristeći znakove
Grep naredba je vrlo moćna. Za filtriranje rezultata možete koristiti mnoštvo tehnika prilagođavanja uzoraka.
U ovom primeru ću vam pokazati kako potražiti niz u fajlu koristeći džokerove .
Zamislite da imate datoteku zvanu mjesta sa sledećim nazivima škotskog mesta:
aberdeen
aberystwyth
aberlour
inverurie
inverness
newburgh
novi jelen
novi galloway
glasgow
edinburgh
Ako želite da pronađete sva mesta sa inver u ime koristite sledeću sintaksu:
grep inver * mesta
Asterisk (*) wildcard označava 0 ili više. Prema tome, ako imate mesto zvano Inver ili mesto nazvano inverness onda će se oba vratiti.
Još jedan džoker koji možete koristiti je period (.). Ovo možete koristiti za pojedinačno slovo.
grep inver.r mesta
Gornja komanda bi pronašla mjesta koja se nazivaju inverurie i inverarije, ali ne bi mogla naći invereerie jer može biti samo jedna džokarta između dva r-a koja se označava u jedinstvenom periodu.
Džemperi za period su korisni ali može izazvati probleme ako ih imate kao dio teksta koji tražite.
Na primer, pogledajte ovu listu domenskih imena
- 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 About.com, možete pretraživati samo sledeću sintaksu:
grep * o * domainnames
Gornja komanda će pasti ako lista sadrži sledeće ime u njemu:
- everydaylinuxuser.com/about.html
Stoga, možete pokušati sledeću sintaksu:
grep * about.com domainnames
Ovo bi funkcioniralo u redu osim ako nije postojao domen sa slijedećim imenom:
aboutycom.com
Da biste zaista tražili izraz o mreži, trebalo bi da izbegnete tačku na sledeći način:
grep * o \ .com domenskim imenima
Konačna džokarta koja će vam pokazati je znak pitanja koja označava nulu ili jedan karakter.
Na primjer:
grep? ber placenames
Gornja komanda će vratiti aberdeen, aberistvit ili čak berwick.
03 od 09
Traži strune na početku i kraju linije Koristeći grep
Karat (^) i dolar ($) simbol omogućavaju vam da tražite obrasce na početku i kraju linija.
Zamislite da imate datoteku pod nazivom fudbal sa sljedećim timskim imenima:
- Blekpul
- Liverpool
- Manchester City
- Leicester City
- Manchester United
- Newcastle United
- FC United Of Manchester
Ako ste želeli da pronađete sve ekipe koje su počele sa Manchesterom, koristićete sledeću sintaksu:
grep ^ Manchester tima
Gornja komanda bi vratila Manchester City i Manchester United, ali ne i FC United Of Manchester.
Alternativno možete pronaći sve timove koji se završavaju sa United koristeći sledeću sintaksu:
grep United $ timova
Gornja komanda bi vratila Manchester United i Newcastle United, ali ne i FC United Of Manchester.
04 od 09
Brojanje utakmica pomoću grep
Ako ne želite da vratite stvarne linije koje odgovaraju šablonu koristeći grep, ali samo želite da saznate koliko postoje, možete koristiti sledeću sintaksu:
grep -c obrazac inputfile
Ako je obrazac dvaput uparen onda će broj 2 biti vraćen.
05 od 09
Pronalaženje svih uslova koji se ne podudaraju koristeći grep
Zamislite da imate spisak naziva mesta sa navedenim zemljama na sledeći način:
- aberdeen scotland
- glasgow scotland
- Liverpool Engleska
- colwyn zaliv
- london england
Možda ste primetili da kolevski zaljev nema zemlju koja je povezana s tim.
Da biste potražili sva mesta sa državom, mogli biste da koristite sledeću sintaksu:
grep zemljišta $
Povratni rezultati bi bili sva mesta osim kolevskog zaliva.
Ovo očigledno radi samo za mesta koja se završavaju na kopnu (teško naučna).
Možete izabrati opciju koristeći sledeću sintaksu:
grep -v zemlja $ mesta
Ovo bi moglo da pronađe sva mesta koja se nisu završila zemljom.
06 od 09
Kako pronaći prazne linije u fajlovima pomoću grep
Zamislite da imate ulaznu datoteku koju koristi aplikacija treće strane koja zaustavlja čitanje datoteke kada pronađe praznu liniju na sljedeći način:
- aberdeen scotland
- inverness scotland
- Liverpool Engleska
- colwyn bay wales
Kada se aplikacija stigne na liniju nakon liverpool-a prestane da čita značenje u potpunosti je propusteno.
Možete koristiti grep da traži prazne linije sa sledećom sintaksom:
grep ^ $ mesta
Nažalost, ovo nije naročito korisno jer samo vraća prazne linije.
Naravno, možete da brojite broj praznih linija kao proveru da li je datoteka važeća na sledeći način:
grep -c ^ $ mesta
Bilo bi korisnije znati brojeve linija koji imaju praznu liniju tako da ih možete zamijeniti. To možete učiniti pomoću sledeće naredbe:
grep -n ^ $ mesta
07 od 09
Kako tražiti stringove gornje ili male slovne znakove Koristeći grep
Koristeći grep možete odrediti koje linije u fajlu imaju velike slova koristeći sljedeću sintaksu:
grep '[AZ]' filename
Kvadratne zagrade [] omogućavaju vam da odredite opseg karaktera. U gornjim primjerima se podudaraju svi znakovi između A i Z.
Prema tome, da biste podesili male slova, možete koristiti sledeću sintaksu:
grep '[az]' filename
Ako želite da odgovarate samo slovima a ne numeričkim ili drugim simbolima, možete koristiti sledeću sintaksu:
grep '[a-zA-Z]' filename
Možete to učiniti i sa brojevima na sljedeći način:
grep '[0-9]' filename
08 od 09
Traženje ponavljajućih šablona Koristeći grep
Možete iskoristiti zakrivljene zagrade {} da biste potražili ponavljajući obrazac.
Zamislite da imate datoteku sa brojevima na slijedeći način:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Znate da prvi deo broja treba da bude tri cifre i želite pronaći linije koje ne odgovaraju ovom šablonu.
Iz prethodnog primera znate da [0-9] vraća sve brojeve u datoteku.
U ovom slučaju želimo da linije koje počinju sa tri broja sledi veza (-). To možete uraditi s sljedećom sintaksom:
grep "^ [0-9] [0-9] [0-9] -" brojevi
Kao što znamo iz prethodnih primera, karat (^) znači da linija mora početi sa sledećim obrazcem.
[0-9] traži bilo koji broj između 0 i 9. Kako je ovo uključeno tri puta, odgovara 3 broja. Na kraju, postoji veza za označavanje da veza mora da uspije tri brojeve.
Pomoću uvrtanih zagrada možete učiniti manju pretragu na sledeći način:
grep "^ [0-9] \ {3 \} -" brojevi
Kretanje izbjegava {držač tako da radi kao dio regularnog izraza, ali u suštini ono što ovo govori je [0-9] {3} što znači bilo koji broj između 0 i 9 tri puta.
Zakrivljene konzole se mogu koristiti i na sledeći način:
{5,10}
{5,}
{5,10} znači da se traženi karakter mora ponoviti najmanje 5 puta, ali ne više od 10, dok {5,} znači da se karakter mora ponoviti najmanje 5 puta, ali može biti više od toga.
09 od 09
Korišćenje izlaza iz drugih komandi Koristeći grep
Do sada smo pogledali uzorkovanje u pojedinačnim datotekama, ali grep može koristiti izlaz iz drugih komandi kao ulaz za podudaranje uzoraka.
Odličan primer ovoga je korišćenje komande ps koji sadrži aktivne procese.
Na primer, pokrenite sledeću komandu:
ps -ef
Svi procesi koji se pokreću na vašem sistemu će biti prikazani.
Možete koristiti grep da potražite određeni pokretački proces na sledeći način:
ps -ef | grep firefox