Uvod
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 ću članku pokazati niz primjera koji će vam pomoći da razumijete grep naredbu.
01 od 09
Kako 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 Knjige
Vratit ć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.
Imajte na umu da je pretraživanje osjetljivo na velika i mala slova tako da ako jedan od naslova ima "umjesto" "umjesto" onda se ne bi vratio.
Za zanemarivanje slučaja možete dodati sljedeću sklopku:
zalijepite knjige - slučajni slučaj
Također možete koristiti sklopku -i na sljedeći način:
grep -i knjige
02 od 09
Traž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:
Aberdeen
Aberystwyth
aberlour
Inverurie
Inverness
Newburgh
novi jeleni
novo galloway
Glazgov
Edinburg
Ako želite pronaći sva mjesta s inv u ime upotrijebite sljedeću sintaksu:
grep inver * mjesta
Zvjezdica zvjezdice (*) označava 0 ili više. Stoga, ako imate mjesto zvan inver ili mjesto zvano inverzno onda bi se oboje vratili.
Još jedna zamjenska kartica koju možete koristiti jest razdoblje (.). To možete upotrijebiti za odgovaranje na jedno slovo.
grep inver.r mjesta
Gornja 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 about.comove, možete pretraživati pomoću sljedeće sintakse:
grep * about * imena domena
Gornja naredba pada ako popis sadrži sljedeće ime:
- everydaylinuxuser.com/about.html
Stoga biste mogli probati sljedeću sintaksu:
grep * about.com domainnames
To bi bilo dobro ako ne postoji domena sa sljedećim imenom:
aboutycom.com
Da biste zaista tražili pojam about.com, trebali biste izbjeći točku na sljedeći način:
grep * about \ .com domainnames
Konačni zamjenski znak koji će vam pokazati je upitnik koji označava nulu ili jedan znak.
Na primjer:
grep? ber placenames
Gornja naredba vratit će aberdeen, aberystwyth ili čak berwick.
03 od 09
Pretraž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čadi
Gornja 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 sa Unitedom koristeći sljedeću sintaksu:
grep United $ timovi
Gornja naredba vratit će Manchester United i Newcastle United, ali ne FC United Of Manchester.
04 od 09
Brojanje 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 inputfile
Ako je uzorak dvostruko podudaran onda bi se broj 2 vratio.
05 od 09
Pronalaženje svih uvjeta koji se ne podudaraju koristeći grep
Zamislite da imate popis imena mjesta s navedenim zemljama kako slijedi:
- aberdeen scotland
- glasgow scotland
- liverpool england
- 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 $ mjesta
Rezultati 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 $ mjesta
To bi otkrilo sva mjesta koja nisu završila sa zemljom.
06 od 09
Kako 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 ^ $ mjesta
Naž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 ^ $ mjesta
Bilo 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 ^ $ mjesta
07 od 09
Kako 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 '[AZ]' naziv datoteke
Kvadratne 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 '[az]' naziv datoteke
Ako želite podudarati samo slova, a ne numeričke ili druge simbole, koristite sljedeću sintaksu:
grep '[a-zA-Z]' naziv datoteke
Isto možete učiniti i sa brojevima kako slijedi:
grep '[0-9]' naziv datoteke
08 od 09
Traž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] -" brojevi
Kao š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 \} -" brojevi
Slash 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.
09 od 09
Koriš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 -ef
Prikazuju se svi pokrenuti procesi na vašem sustavu.
Možete koristiti grep za traženje određenog procesa pokretanja kako slijedi:
ps -ef | grep firefox