Ime zahvat dolazi iz naredbe ed (i vim) g/re/p, što znači globalno tražiti zadani regularni izraz i ispisati (prikazati) izlaz.
Redovito Izrazi
Uslužni programi omogućuju korisniku pretraživanje tekstualnih datoteka za retke koji odgovaraju regularnom izrazu ( regexp ). Regularni izraz je niz za pretraživanje sastavljen od teksta i jednog ili više od 11 posebnih znakova. Jednostavan primjer je podudaranje početka retka.
Primjer datoteke
Osnovni oblik zahvat mogu se koristiti za pronalaženje jednostavnog teksta unutar određene datoteke ili datoteka. Kako biste isprobali primjere, najprije stvorite datoteku uzorka.
Upotrijebite uređivač, poput nano ili vim, da biste donji tekst kopirali u datoteku pod nazivom myfile .
xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Iako možete kopirati i zalijepiti primjere u tekst (imajte na umu da se dvostruki navodnici možda neće pravilno kopirati), naredbe je potrebno upisati kako biste ih pravilno naučili.
Prije isprobavanja primjera pogledajte oglednu datoteku:
$mačkamyfile
Jednostavno pretraživanje
Da biste pronašli tekst 'xyz' unutar datoteke, pokrenite sljedeće:
$zahvatxyz moja datotekaKorištenje boja
Za prikaz boja upotrijebite –color (dvostruka crtica) ili jednostavno stvorite pseudonim. Na primjer:
$zahvat --bojaxyz moja datotekaili
$alias zahvat= ’zahvat--boja'$zahvatxyz moja datoteka
Opcije
Uobičajene opcije koje se koriste s zahvat naredbe uključuju:
- -nalazim sve retke bez obzira slučaja
- -c računati koliko redaka sadrži tekst
- -n linija prikaza brojevima odgovarajućih linija
- -samo na ekranu datoteka imena ta utakmica
- -r ponavljajući pretraživanje poddirektorija
- -v pronaći sve retke NE koji sadrži tekst
Na primjer:
$zahvat -ixyz moja datoteka# pronaći tekst bez obzira na veličinu slova$zahvat -icxyz moja datoteka# broj redaka s tekstom
$zahvat -uxyz moja datoteka# prikazuju brojeve redaka
Stvorite više datoteka
Prije nego pokušate pretraživati više datoteka, prvo stvorite nekoliko novih datoteka:
$izbacitixyz>myfile1$izbaciti -Ixyz nxzz nXYZ>myfile2
$izbaciti -Ixxx nyyy>myfile3
$mačkamyfile1
$mačkamyfile2
$mačkamyfile3
Pretražite više datoteka
Za pretraživanje više datoteka pomoću naziva datoteka ili zamjenskog znaka unesite:
$zahvat -icxyz moja datoteka myfile1 myfile2 myfile3$zahvat -uxyz moj*
# podudaraju se nazivi datoteka koji počinju s 'moj'
Vježba I.
- Prvo izbrojite koliko redaka ima u datoteci /etc /passwd.
- Sada pronađite sve pojave teksta gdje u datoteci /etc /passwd .
- Saznajte koliko redaka u datoteci sadrži tekst
- Saznajte koliko redaka NE sadrži tekst gdje .
- Pronađite unos za svoju prijavu u /etc/passwd
Rješenja za vježbe možete pronaći na kraju ovog članka.
Korištenje regularnih izraza
Naredba zahvat mogu se koristiti i s regularnim izrazima pomoću jednog ili više od jedanaest posebnih znakova ili simbola za preciziranje pretraživanja. Regularni izraz je niz znakova koji uključuje posebne znakove koji omogućuju podudaranje uzoraka unutar pomoćnih programa, kao što je zahvat , došao sam i sed . Imajte na umu da će nizove možda trebati staviti u navodnike.
Dostupni posebni znakovi uključuju:
^ | Početak linije |
$ | Kraj reda |
. | Bilo koji znak (osim n novog retka) |
* | 0 ili više prethodnih izraza |
Prethodni simbol čini ga doslovnim znakom |
Imajte na umu da *, koji se može koristiti u naredbenom retku za podudaranje s bilo kojim brojem znakova, uključujući nijedan, jest ne ovdje se koristi na isti način.
Također obratite pozornost na upotrebu navodnika u sljedećim primjerima.
Primjeri
Da biste pronašli sve retke koji počinju s tekstom pomoću znaka ^:
$zahvat‘^Xyz’ moja datotekaDa biste pronašli sve retke koji završavaju tekstom koristeći znak $:
$zahvat'Xyz $' myfileDa biste pronašli retke koji sadrže niz pomoću znakova ^ i $:
$zahvat‘^Xyz $’ moja datotekaDa biste pronašli retke pomoću . odgovara bilo kojem liku:
$zahvat‘^X.z’ moja datotekaDa biste pronašli retke pomoću * koji odgovaraju 0 ili više prethodnog izraza:
$zahvat‘^Xy*z ’myfileDa biste pronašli retke pomoću.* Koji odgovaraju 0 ili više bilo kojeg znaka:
$zahvat‘^ X.*z ’myfileDa biste pronašli retke pomoću za izbjegavanje znaka *:
$zahvat‘^ X *z ’myfileDa biste pronašli znak, upotrijebite:
$zahvat‘\’ moja datotekaIzraz grep - egrep
The zahvat naredba podržava samo podskup dostupnih regularnih izraza. Međutim, naredba čaplja:
- dopušta potpunu uporabu svih regularnih izraza
- može istodobno tražiti više od jednog izraza
Imajte na umu da izrazi moraju biti zatvoreni u par navodnika.
Za upotrebu boja upotrijebite –color ili ponovno stvorite pseudonim:
$alias egrep='čaplja -boja'Da biste tražili više od jednog regeks the egrep naredba se može zapisati u više redaka. Međutim, to se može učiniti i pomoću ovih posebnih znakova:
| | Alternacija, jedno ili drugo |
(…) | Logičko grupiranje dijela izraza |
Ovo izdvaja retke koji počinju s root, uucp ili mail iz datoteke, | simbol koji znači bilo koju od opcija.
Sljedeća naredba će ne rada, iako se ne prikazuje poruka, budući da je osnovni zahvat naredba ne podržava sve regularne izraze:
$zahvat '(^root |^uucp |^pošta)' /itd/passwdMeđutim, na većini Linux sustava naredba grep -E isto je kao i korištenje egrep :
$zahvat -I '(^root |^uucp |^pošta)' /itd/passwdKorištenje filtera
Cijevi je proces slanja rezultata jedne naredbe kao ulaz u drugu naredbu i jedan je od najmoćnijih dostupnih Linux alata.
Naredbe koje se pojavljuju u cjevovodu često se nazivaju filterima jer u mnogim slučajevima prosiju ili mijenjaju ulaz koji im je proslijeđen prije slanja izmijenjenog toka na standardni izlaz.
U sljedećem primjeru standardni izlaz iz ls -l se prenosi kao standardni ulaz u zahvat naredba. Izlaz iz zahvat naredba se zatim prenosi kao ulaz u više naredba.
Ovo će prikazati samo direktorije u /itd :
$ls - /itd|zahvat‘^D’|višeSljedeće naredbe su primjeri korištenja filtara:
$p.s -ef|zahvatcron $tko|zahvatkdmPrimjer datoteke
Kako biste isprobali vježbu pregleda, prvo stvorite sljedeću datoteku uzorka.
Upotrijebite uređivač, poput nano ili vim, da biste donji tekst kopirali u datoteku pod nazivom narod:
Osobni J.Smith 25000Osobni E.Smith 25400
Trening A.Brown 27500
Obuka C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Osobni F.Jones 25000
obuka* C.Evans 25500
Goodsout W.Pope 30400
Prizemlje T.Smythe 30500
Osobni J.Maler 33000
Vježba II
- Prikažite datoteku narod i ispitati njegov sadržaj.
- Pronađite sve retke koji sadrže niz Smith u datoteci people.Savjet: upotrijebite naredbu grep, ali zapamtite da prema zadanim postavkama razlikuju velika i mala slova.
- Napravite novu datoteku, npeople, koja sadrži sve retke koji počinju nizom Osobni u datoteci ljudi. Savjet: upotrijebite naredbu grep s>.
- Popis datoteke potvrdite npeople sadržajem datoteke.
- Sada dodajte sve retke gdje tekst završava nizom 500 u datoteci ljudi u datoteku npeople.Savjet: upotrijebite naredbu grep s >>.
- Ponovno potvrdite sadržaj datoteke npeople navođenjem datoteke.
- Pronađite IP adresu poslužitelja koja je pohranjena u datoteci /etc/hosts .Savjet: upotrijebite naredbu grep s $ (hostname)
- Koristiti egrep izdvojiti iz /etc/passwd linije računa računa datoteka koje sadrže lp ili svoje korisnički ID .
Rješenja za vježbe možete pronaći na kraju ovog članka.
Više regularnih izraza
Regularni izraz može se smatrati zamjenskim znakovima na steroidima.
Postoji jedanaest znakova s posebnim značenjem: početna i zatvarajuća uglasta zagrada [], kosa crta , kareta ^, znak dolara $, točka ili točka., Okomita traka ili simbol cijevi |, upitnik?, zvjezdica ili zvjezdica *, znak plus + i okrugla zagrada za otvaranje i zatvaranje {}. Ovi posebni znakovi često se nazivaju i metaznakovima.
Ovdje je cijeli skup posebnih znakova:
^ | Početak linije |
$ | Kraj reda |
. | Bilo koji znak (osim n novog retka) |
* | 0 ili više prethodnih izraza |
| | Alternacija, jedno ili drugo |
[…] | Eksplicitan skup znakova za podudaranje |
+ | 1 ili više prethodnih izraza |
? | 0 ili 1 prethodnog izraza |
Prethodni simbol čini ga doslovnim znakom | |
{…} | Eksplicitan zapis kvantifikatora |
(…) | Logičko grupiranje dijela izraza |
Zadana verzija zahvat ima samo ograničenu podršku za regularne izraze. Kako bi svi sljedeći primjeri funkcionirali, upotrijebite egrep umjesto ili grep -E .
Da biste pronašli retke pomoću | da odgovara bilo kojem izrazu:
$egrep‘Xxz|xzz ’moja datotekaZa pronalaženje redaka pomoću | za podudaranje bilo kojeg izraza unutar niza također upotrijebite ():
$egrep‘^ X(Yz|yz)’Moja datotekaDa biste pronašli retke pomoću [] za podudaranje s bilo kojim znakom:
$egrep‘^ X[YY]z ’myfileDa biste pronašli retke pomoću [] koji NE odgovaraju nijednom znaku:
$egrep‘^ X[^ Yy]z ’myfileDa biste pronašli retke pomoću * koji odgovaraju 0 ili više prethodnog izraza:
$egrep‘^Xy*z ’myfileDa biste pronašli retke pomoću + koji odgovaraju 1 ili više prethodnih izraza:
$egrep‘^Xy+z’ moja datotekaDa biste pronašli retke pomoću? da odgovara 0 ili 1 prethodnog izraza:
$egrep‘^Xy? Z’ moja datotekaVježba III
- Pronađi sve retke koji sadrže imena Evans ili slikar u datoteci ljudi.
- Pronađi sve retke koji sadrže imena Smith, Smyth ili Smythe u datoteci ljudi.
- Pronađi sve retke koji sadrže imena Brown, Browen ili Izvor u datoteci ljudi.Ako imate vremena:
- Pronađite redak koji sadrži niz (admin), uključujući zagrade, u datoteci ljudi.
- Pronađite redak koji sadrži znak * u datoteci ljudi.
- Kombinirajte gornje 5 i 6 da biste pronašli oba izraza.
Više primjera
Za pronalaženje redaka pomoću . i * da odgovara bilo kojem skupu znakova:
$egrep‘^Xy.*z ’myfileDa biste pronašli retke pomoću {} za podudaranje s N brojem znakova:
$egrep‘^Xy{3}z ’myfile$egrep‘^Xy{4}z ’myfile
Da biste pronašli retke pomoću {} za podudaranje s N ili više puta:
$egrep‘^Xy{3,}z ’myfileDa biste pronašli retke pomoću {} za podudaranje s N puta, ali ne više od M puta:
$egrep‘^Xy{2,3}z ’myfileZaključak
U ovom smo vodiču prvo pogledali korištenje zahvat u jednostavnom obliku pronaći tekst u datoteci ili u više datoteka. Zatim smo kombinirali tekst za traženje s jednostavnim regularnim izrazima, a zatim pomoću složenijih egrep .
Sljedeći koraci
Nadam se da ćete ovdje stečeno znanje dobro iskoristiti. Probati zahvat naredbe na vlastitim podacima i zapamtite, regularni izrazi kako je ovdje opisano mogu se koristiti u istom obliku u mi , sed i awk !
Rješenja za vježbe
Vježba I.
Prvo izbrojite koliko redaka ima u datoteci /etc/passwd .
$ wc -l /etc/passwd
Sada pronađite sve pojave teksta gdje u datoteci /etc /passwd.
$ grep var /etc/passwd
Saznajte koliko redaka u datoteci sadrži tekst gdje
Saznajte koliko redaka NE sadrži tekst gdje .
zahvat -cvgdje/itd/passwdPronađite unos za svoju prijavu u /etc/passwd datoteka
grep kdm /etc/passwd
Vježba II
Prikažite datoteku narod i ispitati njegov sadržaj.
$ cat people
Pronađite sve retke koji sadrže niz Smith u datoteci narod .
$ grep 'Smith' people
Izradite novu datoteku, nljudi , koji sadrži sve retke koji počinju nizom Osobni u narod datoteka
$ grep '^Personal' people> npeople
Potvrdite sadržaj datoteke nljudi uvrštavanjem datoteke.
$ cat npeople
Sada dodajte sve retke gdje tekst završava nizom 500 u datoteci narod u datoteku nljudi .
$ grep '500$' people>>npeople
Ponovno potvrdite sadržaj datoteke nljudi uvrštavanjem datoteke.
$ cat npeople
Pronađite IP adresu poslužitelja koja je pohranjena u datoteci /etc/hosts .
$ grep $(hostname) /etc/hosts
Koristiti egrep izdvojiti iz /etc/passwd linije računa računa datoteka koje sadrže lp ili svoj korisnički ID.
$ egrep '(lp|kdm:)' /etc/passwd
Vježba III
Pronađi sve retke koji sadrže imena Evans ili slikar u datoteci narod .
$ egrep 'Evans|Maler' people
Pronađi sve retke koji sadrže imena Smith , Smyth ili Smythe u datoteci narod .
$ egrep 'Sm(i|y)the?' people
Pronađi sve retke koji sadrže imena Smeđa , Browen ili Izvor u datoteci ljudi.
$ egrep 'Brow?e?n' people
Pronađite redak koji sadrži niz (admin), uključujući zagrade u datoteci narod .
Pronađite redak koji sadrži znak * u datoteci ljudi.
$ egrep '*' people
Kombinirajte gornje 5 i 6 da biste pronašli oba izraza.