Ime oprijem izhaja iz ukaza ed (in vim) g/re/p, kar pomeni globalno iskanje določenega regularnega izraza in tiskanje (prikaz) izpisa.
Redno Izrazi
Pripomočki uporabniku omogočajo iskanje besedilnih datotek za vrstice, ki se ujemajo z regularnim izrazom ( regexp ). Regularni izraz je iskalni niz, sestavljen iz besedila in enega ali več od 11 posebnih znakov. Preprost primer je ujemanje začetka vrstice.
Vzorčna datoteka
Osnovna oblika oprijem lahko uporabite za iskanje preprostega besedila v določeni datoteki ali datotekah. Če želite preizkusiti primere, najprej ustvarite vzorčno datoteko.
Uporabite urejevalnik, kot sta nano ali vim, da spodnje besedilo kopirate v datoteko, imenovano myfile .
xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Čeprav lahko kopirate in prilepite primere v besedilo (upoštevajte, da se dvojni narekovaji morda ne kopirajo pravilno), je treba ukaze vnesti, da se jih lahko pravilno naučite.
Preden preizkusite primere, si oglejte vzorčno datoteko:
$mačkamyfile
Enostavno iskanje
Če želite poiskati besedilo 'xyz' v datoteki, zaženite naslednje:
$oprijemxyz myfileUporaba barv
Za prikaz barv uporabite –color (dvojni vezaj) ali preprosto ustvarite vzdevek. Na primer:
$oprijem -barvaxyz myfileali
$vzdevek oprijem= 'oprijem-barva '$oprijemxyz myfile
Opcije
Skupne možnosti, ki se uporabljajo z oprijem ukaz vključuje:
- -najdem vse vrstice ne glede na to primera
- -c šteti koliko vrstic vsebuje besedilo
- -n prikazovalna vrstica številke ujemajočih se vrstic
- -samo zaslon mapa imena to tekmo
- -r rekurzivno iskanje podimenikov
- -v najdem vse vrstice NE ki vsebuje besedilo
Na primer:
$oprijem -jazxyz myfile# poišči besedilo ne glede na velike in male črke$oprijem -icxyz myfile# štetje vrstic z besedilom
$oprijem -vxyz myfile# prikaži številke vrstic
Ustvarite več datotek
Preden iščete več datotek, najprej ustvarite več novih datotek:
$vrgel venxyz>myfile1$vrgel ven -Inxyz nxzz nXYZ>myfile2
$vrgel ven -Inxxx nyyy>myfile3
$mačkamyfile1
$mačkamyfile2
$mačkamyfile3
Iščite po več datotekah
Če želite iskati več datotek z imeni datotek ali nadomestnim znakom, vnesite:
$oprijem -icxyz myfile myfile1 myfile2 myfile3$oprijem -vxyz moj*
# imena datotek, ki se ujemajo z »moj«
Vaja I.
- Najprej preštejte, koliko vrstic je v datoteki /etc /passwd.
- Zdaj poiščite vse pojavitve besedila kje v datoteki /etc /passwd .
- Poiščite, koliko vrstic v datoteki vsebuje besedilo
- Ugotovite, koliko vrstic NE vsebuje besedila kje .
- Poiščite vnos za prijavo v /etc/passwd
Rešitve vaj najdete na koncu tega članka.
Uporaba regularnih izrazov
Ukaz oprijem se lahko uporablja tudi z regularnimi izrazi z uporabo enega ali več od enajstih posebnih znakov ali simbolov za natančnejše iskanje. Regularni izraz je niz znakov, ki vključuje posebne znake, ki omogočajo ujemanje vzorcev znotraj pripomočkov, kot so oprijem , Sem prišel in sed . Upoštevajte, da je treba nize morda navesti v narekovajih.
Na voljo so posebni znaki:
^ | Začetek vrstice |
$ | Konec vrstice |
. | Kateri koli znak (razen n nove vrstice) |
* | 0 ali več prejšnjega izraza |
Pred simbolom postane dobesedni znak |
Upoštevajte, da *, ki se lahko uporabi v ukazni vrstici za ujemanje s katerim koli številom znakov, vključno z nobenim, je ne se tukaj uporablja na enak način.
Upoštevajte tudi uporabo narekovajev v naslednjih primerih.
Primeri
Če želite poiskati vse vrstice, ki se začnejo z besedilom, z znakom ^:
$oprijem»^Xyz« moja datotekaČe želite poiskati vse vrstice, ki se končajo z besedilom, z znakom $:
$oprijem»Xyz $« myfileČe želite poiskati vrstice, ki vsebujejo niz z znaki ^ in $:
$oprijem'^Xyz $' myfileČe želite poiskati vrstice z . se ujema s katerim koli likom:
$oprijem»^X.z« moja datotekaČe želite poiskati vrstice z znakom * za 0 ali več prejšnjega izraza:
$oprijem‘^Xy*z ’myfileČe želite poiskati vrstice z.* Za ujemanje 0 ali več katerega koli znaka:
$oprijem‘^ X.*z ’myfileČe želite poiskati vrstice z za pobeg od znaka *:
$oprijem‘^ X *z ’myfileZa iskanje znaka uporabite:
$oprijem'\' myfileIzraz grep - egrep
The oprijem ukaz podpira le podmnožico regularnih izrazov, ki so na voljo. Vendar pa ukaz egrep:
- omogoča polno uporabo vseh regularnih izrazov
- lahko hkrati išče več kot en izraz
Upoštevajte, da morajo biti izrazi zaprti v par narekovajev.
Če želite uporabiti barve, uporabite –color ali znova ustvarite vzdevek:
$vzdevek egrep='egrep -barva'Za iskanje več kot enega regex the egrep ukaz je lahko zapisan v več vrsticah. To pa lahko storite tudi s temi posebnimi znaki:
| | Izmenjava, bodisi ena ali druga |
(…) | Logično združevanje dela izraza |
Tako izvlečete vrstice, ki se začnejo z root, uucp ali mail iz datoteke, | simbol, ki pomeni eno od možnosti.
Naslednji ukaz bo ne delo, čeprav ni prikazano nobeno sporočilo, saj je osnovni oprijem ukaz ne podpira vseh regularnih izrazov:
$oprijem '(^root |^uucp |^mail)' /itd/passwdVendar pa je v večini sistemov Linux ukaz grep -E je enako kot pri uporabi egrep :
$oprijem -IN '(^root |^uucp |^mail)' /itd/passwdUporaba filtrov
Cevovodi je postopek pošiljanja izida enega ukaza kot vhod v drug ukaz in je eno najmočnejših razpoložljivih orodij Linuxa.
Ukazi, ki se pojavijo v cevovodu, se pogosto imenujejo filtri, saj v mnogih primerih presejejo ali spremenijo vhod, ki jim je bil poslan, preden pošljejo spremenjeni tok na standardni izhod.
V naslednjem primeru standardni izhod iz ls -l se posreduje kot standardni vhod v oprijem ukaz. Izhod iz oprijem ukaz se nato posreduje kot vhod v več ukaz.
To bo prikazalo samo imenike v /itd :
$ls - /itd|oprijem'^D'|večNaslednji ukazi so primeri uporabe filtrov:
$ps -ef|oprijemcron $WHO|oprijemkdmVzorčna datoteka
Če želite preizkusiti vajo pregleda, najprej ustvarite naslednjo vzorčno datoteko.
Uporabite urejevalnik, kot sta nano ali vim, da spodnje besedilo kopirate v datoteko, imenovano ljudje:
Osebni J.Smith 25000Osebni E.Smith 25400
Usposabljanje A. Brown 27500
Usposabljanje C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Osebni F.Jones 25000
usposabljanje* C.Evans 25500
Goodsout W.Pope 30400
Pritličje T.Smythe 30500
Osebni J.Maler 33000
Vaja II
- Prikažite datoteko ljudi in preuči njeno vsebino.
- Poiščite vse vrstice, ki vsebujejo niz Smith v datoteki ljudje. Namig: uporabite ukaz grep, vendar ne pozabite, da privzeto razlikuje velike in male črke.
- Ustvarite novo datoteko npeople, ki vsebuje vse vrstice, ki se začnejo z nizom Osebno v datoteki oseb. Namig: uporabite ukaz grep z>.
- Vsebino datoteke potrdite s seznamom datoteke.
- Zdaj dodajte vse vrstice, kjer se besedilo konča z nizom 500 v datoteki ljudje v datoteko npeople.Namig: uporabite ukaz grep s >>.
- Ponovno potrdite vsebino datoteke npeople tako, da navedete datoteko.
- Poiščite naslov IP strežnika, ki je shranjen v datoteki /etc/hosts .Namig: uporabite ukaz grep z $ (ime gostitelja)
- Uporaba egrep izvleči iz /etc/passwd vrstice računov datotek, ki vsebujejo lp ali svoje Uporabniško ime .
Rešitve vaj najdete na koncu tega članka.
Več regularnih izrazov
Redni izraz si lahko predstavljamo kot nadomestne znake na steroidih.
Obstaja enajst znakov s posebnim pomenom: začetni in zaključni oglati oklepaj [], poševnica , kareta ^, znak dolarja $, pika ali pika., Navpična črta ali simbol cevi |, vprašaj?, zvezdica ali zvezdica *, znak plus + ter oklepaj za odpiranje in zapiranje {}. Te posebne znake pogosto imenujemo tudi metaznaki.
Tu je celoten nabor posebnih znakov:
^ | Začetek vrstice |
$ | Konec vrstice |
. | Kateri koli znak (razen n nove vrstice) |
* | 0 ali več prejšnjega izraza |
| | Izmenjava, bodisi ena ali druga |
[…] | Eksplicitni nabor znakov za ujemanje |
+ | 1 ali več prejšnjih izrazov |
? | 0 ali 1 prejšnjega izraza |
Pred simbolom postane dobesedni znak | |
{…} | Eksplicitni zapis kvantifikatorja |
(…) | Logično združevanje dela izraza |
Privzeta različica oprijem ima le omejeno podporo za regularne izraze. Če želite, da vsi naslednji primeri delujejo, uporabite egrep namesto oz grep -E .
Če želite poiskati vrstice z | da se ujema z enim ali drugim izrazom:
$egrep'Xxz|xzz 'myfileZa iskanje vrstic z uporabo | za ujemanje katerega koli izraza v nizu uporabite tudi ():
$egrep‘^ X(Yz|yz)'MyfileČe želite poiskati vrstice s tipko [] za ujemanje katerega koli znaka:
$egrep‘^ X[Yy]z ’myfileČe želite poiskati vrstice s tipko [], da se NE ujemajo z nobenim znakom:
$egrep‘^ X[^ Yy]z ’myfileČe želite poiskati vrstice z znakom * za 0 ali več prejšnjega izraza:
$egrep‘^Xy*z ’myfileČe želite poiskati vrstice z znakom + za ujemanje 1 ali več prejšnjega izraza:
$egrep‘^Xy+z’ myfileČe želite poiskati vrstice z? da se ujema z 0 ali 1 prejšnjega izraza:
$egrep'^Xy? Z' myfileVaja III
- Poiščite vse vrstice z imeni Evans ali slikar v datoteki ljudje.
- Poiščite vse vrstice z imeni Smith, Smyth ali Smythe v datoteki ljudje.
- Poiščite vse vrstice z imeni Brown, Browen ali Vir v datoteki ljudje. Če imate čas:
- Poiščite vrstico, ki vsebuje niz (administrator), vključno z oklepaji, v datoteki ljudje.
- Poiščite vrstico, ki vsebuje znak * v datoteki ljudje.
- Združite zgornji 5 in 6, da poiščete oba izraza.
Več primerov
Za iskanje vrstic z uporabo . in * za ujemanje s katerim koli nizom znakov:
$egrep‘^Xy.*z ’myfileČe želite poiskati vrstice z {} za ujemanje s številom N znakov:
$egrep‘^Xy{3}z ’myfile$egrep‘^Xy{4}z ’myfile
Če želite poiskati vrstice z {} za ujemanje N ali večkrat:
$egrep‘^Xy{3,}z ’myfileČe želite poiskati vrstice z {} za ujemanje N -krat, vendar ne več kot M -krat:
$egrep‘^Xy{2,3}z ’myfileZaključek
V tej vadnici smo najprej pogledali uporabo oprijem v enostavni obliki najdete besedilo v datoteki ali v več datotekah. Besedilo, ki ga iščemo, smo nato združili s preprostimi regularnimi izrazi in nato z uporabo bolj zapletenih egrep .
Naslednji koraki
Upam, da boste tukaj pridobljeno znanje dobro uporabili. Poskusi oprijem ukaze na lastne podatke in zapomnite si, da lahko regularne izraze, opisane tukaj, uporabite v isti obliki v mi , sed in awk !
Rešitve za vadbo
Vaja I.
Najprej preštejte, koliko vrstic je v datoteki /etc/passwd .
$ wc -l /etc/passwd
Zdaj poiščite vse pojavitve besedila kje v datoteki /etc /passwd.
$ grep var /etc/passwd
Poiščite, koliko vrstic v datoteki vsebuje besedilo kje
Ugotovite, koliko vrstic NE vsebuje besedila kje .
oprijem -cvkje/itd/passwdPoiščite vnos za prijavo v /etc/passwd mapa
grep kdm /etc/passwd
Vaja II
Prikažite datoteko ljudi in preuči njeno vsebino.
$ cat people
Poiščite vse vrstice, ki vsebujejo niz Smith v datoteki ljudi .
$ grep 'Smith' people
Ustvarite novo datoteko, n ljudi , ki vsebuje vse vrstice, ki se začnejo z nizom Osebno v ljudi mapa
$ grep '^Personal' people> npeople
Potrdite vsebino datoteke n ljudi z navedbo datoteke.
$ cat npeople
Zdaj dodajte vse vrstice, kjer se besedilo konča z nizom 500 v datoteki ljudi v datoteko n ljudi .
$ grep '500$' people>>npeople
Še enkrat potrdite vsebino datoteke n ljudi z navedbo datoteke.
$ cat npeople
Poiščite naslov IP strežnika, ki je shranjen v datoteki /etc/hosts .
$ grep $(hostname) /etc/hosts
Uporaba egrep izvleči iz /etc/passwd vrstice računov datotek, ki vsebujejo lp ali svoj uporabniški ID.
$ egrep '(lp|kdm:)' /etc/passwd
Vaja III
Poiščite vse vrstice z imeni Evans ali slikar v datoteki ljudi .
$ egrep 'Evans|Maler' people
Poiščite vse vrstice z imeni Smith , Smyth ali Smythe v datoteki ljudi .
$ egrep 'Sm(i|y)the?' people
Poiščite vse vrstice z imeni rjav , Browne ali Vir v datoteki ljudje.
$ egrep 'Brow?e?n' people
Poiščite vrstico, ki vsebuje niz (administrator), vključno z oklepaji v datoteki ljudi .
Poiščite vrstico, ki vsebuje znak * v datoteki ljudje.
$ egrep '*' people
Združite zgornji 5 in 6, da poiščete oba izraza.