Grep (ja egrep) kasutamine koos regulaaravaldistega

Using Grep With Regular Expressions



See õpetus kirjeldab, kuidas mõlemat kasutada haaret (ja egrep) t o leida teksti failidest, nende lihtsal kujul ja kombineerituna regulaaravaldistega. See sisaldab mitmeid näiteid ja harjutused , rohkem lahendusi , vaataja lõpuleviimiseks.

Nimi haaret pärineb käskudest ed (ja vim) g/re/p, mis tähendab antud regulaaravaldise globaalset otsimist ja väljundi printimist (kuvamist).







Regulaarne Väljendid

Utiliidid võimaldavad kasutajal otsida tekstifailidest ridu, mis vastavad regulaaravaldisele ( regulaaravaldis ). Regulaaravaldis on otsingustring, mis koosneb tekstist ja ühest või mitmest 11 erimärgist. Lihtne näide on rea algusesse sobitamine.



Näidisfail

Põhivorm haaret võib kasutada konkreetse faili või failide lihtsa teksti leidmiseks. Näidete proovimiseks looge esmalt näidisfail.



Kasutage alloleva teksti kopeerimiseks faili nimega redaktorit, näiteks nano või vim minu fail .





xyz
xyzde
exyzd
dexyz
d? gxyz
xxz
xzz
x z
x*z
xz
x z
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz

Ehkki võite näiteid teksti kopeerida ja kleepida (pange tähele, et topelt jutumärgid ei pruugi korralikult kopeerida), tuleb käsklused nende õigeks õppimiseks tippida.

Enne näidete proovimist vaadake näidisfaili:



$kassminu fail

Lihtne otsing

Failis teksti „xyz” leidmiseks tehke järgmist.

$haaretxyz minu fail

Värvide kasutamine

Värvide kuvamiseks kasutage –värvi (topelt sidekriips) või looge lihtsalt varjunimi. Näiteks:

$haaret --värvxyz minu fail

või

$teise nimega haaret= 'haaret--värv '
$haaretxyz minu fail

Valikud

Tavalised valikud, mida kasutatakse koos haaret käsk sisaldab:

  • -leian kõik read olenemata juhtumist
  • -c loendama mitu rida sisaldab teksti
  • -kuvamisrida numbrid sobivatest ridadest
  • -ainult ekraan faili nimed see vaste
  • -r korduv alamkataloogide otsing
  • -v leida kõik read MITTE sisaldades teksti

Näiteks:

$haaret -minaxyz minu fail# otsige teksti sõltumata juhtumist

$haaret -icxyz minu fail# loendage tekstiga ridu

$haaret -sissexyz minu fail# näitab reanumbreid

Loo mitu faili

Enne mitme faili otsimist looge esmalt mitu uut faili.

$viskas väljaxyz>minu fail 1
$viskas välja -Jaxyz nxzz nXYZ>minu fail 2
$viskas välja -Jaxxx nyyy>minu fail 3
$kassminu fail 1
$kassminu fail 2
$kassminu fail 3

Otsi mitmest failist

Mitme faili otsimiseks failinimede või metamärgi abil sisestage:

$haaret -icxyz myfile myfile1 myfile2 myfile3
$haaret -sissexyz minu*
# vastavad failinimed, mis algavad tähega „minu”

Harjutus I

  1. Kõigepealt loendage, mitu rida on failis /etc /passwd.
Vihje: kasutadatualett -neid /jne/passwd
  1. Nüüd otsige üles kõik teksti esinemised kus failis /etc /passwd .
  2. Leidke, mitu rida failis teksti sisaldab
  3. Leidke, mitu rida teksti EI sisalda kus .
  4. Leidke oma sisselogimiseks kirje jaotisest /etc/passwd

Treeninglahendused leiate selle artikli lõpust.

Regulaaravaldiste kasutamine

Käsk haaret võib kasutada ka koos regulaaravaldistega, kasutades otsingu täpsustamiseks ühte või mitut üheteistkümnest erimärgist või sümbolist. Regulaaravaldis on märgistring, mis sisaldab erimärke, et võimaldada mustrite sobitamist utiliitides, näiteks haaret , ma tulin ja sed . Pange tähele, et stringid võivad vajada jutumärkides.

Saadaval on järgmised erimärgid:

^ Rida algus
$ Rida lõpp
. Mis tahes märk (välja arvatud n uus rida)
* 0 või enam eelmist avaldist
Sümbolile eelnev muudab selle sõna otseses mõttes

Pange tähele, et *, mida võib käsureal kasutada suvalise arvu tähemärkide, sealhulgas mitte ühegi, sobitamiseks mitte siin kasutatakse samal viisil.

Pange tähele ka jutumärkide kasutamist järgmistes näidetes.

Näited

Kõigi tekstist algavate ridade leidmiseks märgi ^ abil tehke järgmist.

$haaret'^Xyz' minu fail

Kõikide tekstiga lõppevate ridade leidmiseks märgi $ abil tehke järgmist.

$haaret'Xyz $' minu fail

Nii ^ kui ka $ märke sisaldavate stringide leidmiseks toimige järgmiselt.

$haaret'^Xyz $' minu fail

Ridade leidmiseks kasutage . mis tahes tegelasega sobitamiseks:

$haaret'^X.z' minu fail

Kui soovite leida ridu, kasutades *, et see vastaks eelmisele avaldisele 0 või enamaga:

$haaret'^Xy*z 'minu fail

Ridade leidmiseks klahvi* abil, mis vastavad mis tahes tähemärgile 0 või enam, tehke järgmist.

$haaret'^ X.*z 'minu fail

Ridade leidmiseks kasutage * tähemärgist pääsemiseks:

$haaret'^ X *z 'minu fail

Märgi leidmiseks kasutage järgmist.

$haaret'\' minu fail

Väljend grep - egrep

The haaret käsk toetab ainult alamhulka saadaolevatest regulaaravaldistest. Siiski käsk egrep:

  • võimaldab täielikult kasutada kõiki regulaaravaldisi
  • võib korraga otsida rohkem kui ühte väljendit

Pange tähele, et avaldised peavad olema jutumärkide paaris.

Värvide kasutamiseks kasutage –color või looge uuesti alias:

$teise nimega egrep='egrep -värv'

Selleks, et otsida rohkem kui üks regulaaravaldis the egrep käsu võib kirjutada mitmele reale. Seda saab aga teha ka järgmiste erimärkide abil:

| Vaheldus, kas üks või teine
(…) Avaldise osa loogiline rühmitamine
$egrep '(^juur |^uucp |^post)' /jne/passwd

See ekstraheerib failist read, mis algavad root, uucp või mail sümbol, mis tähendab kumbagi valikut.

Järgmine käsk teeb mitte töö, kuigi ühtegi teadet ei kuvata, kuna põhiline haaret käsk ei toeta kõiki regulaaravaldisi:

$haaret '(^juur |^uucp |^post)' /jne/passwd

Kuid enamikus Linuxi süsteemides on käsk grep -E on sama mis kasutamine egrep :

$haaret -JA '(^juur |^uucp |^post)' /jne/passwd

Filtrite kasutamine

Torustik on ühe käsu väljundi saatmine teise käsuna sisendiks ja see on üks võimsamaid saadaolevaid Linuxi tööriistu.

Torujuhtmes kuvatavaid käske nimetatakse sageli filtriteks, kuna paljudel juhtudel sõeluvad need läbi või muudavad neile edastatud sisendit enne muudetud voo standardväljundisse saatmist.

Järgmises näites standardväljund ls -l edastatakse standardse sisendina haaret käsk. Väljund haaret seejärel edastatakse käsk sisendina rohkem käsk.

See kuvab ainult kataloogid /jne :

$ls -neid /jne|haaret'^D'|rohkem

Järgmised käsud on filtrite kasutamise näited:

$ps -liha|haaretcron

$WHO|haaretkdm

Näidisfail

Ülevaatamise proovimiseks looge esmalt järgmine näidisfail.

Kasutage alloleva teksti kopeerimiseks faili nimega redaktorit, näiteks nano või vim inimesed:

Isiklik J.Smith 25000
Isiklik E.Smith 25400
Koolitus A.Brown 27500
Koolitus C.Browen 23400
(Admin) R.Bron 30500
Goodsout T.Smyth 30000
Isiklik F.Jones 25000
koolitus* C.Evans 25500
Goodsout W.Pope 30400
Esimesel korrusel T.Smythe 30500
Isiklik J.Maler 33000

Harjutus II

  1. Kuva fail inimesed ja uurige selle sisu.
  2. Leidke kõik stringid sisaldavad read Smith failis inimesed. Vihje: kasutage käsku grep, kuid pidage meeles, et vaikimisi on see tõstutundlik.
  3. Looge uus fail, npeople, mis sisaldab kõiki ridu, mis algavad stringiga Isiklik inimeste failis. Vihje: kasutage käsku grep koos>.
  4. Kinnitage faili sisu inimestega, loetledes faili.
  5. Nüüd lisage stringile kõik read, kus tekst lõpeb 500 failis inimesed faili faili npeople. Vihje: kasutage käsku grep koos >>.
  6. Jällegi kinnitage faili sisu inimestega, lisades faili.
  7. Leidke faili salvestatud serveri IP -aadress /etc/hosts . Vihje: kasutage käsku grep koos $ (hostname)
  8. Kasutamine egrep välja võtta /etc/passwd failikonto read, mis sisaldavad lp või sinu oma kasutaja ID .

Treeninglahendused leiate selle artikli lõpust.

Veel regulaaravaldisi

Regulaaravaldist võib pidada steroidide metamärkideks.

Seal on üksteist tähemärki, millel on eriline tähendus: algus- ja sulgemisnurksulud [], tagasilöök , karett ^, dollarimärk $, punkt või punkt., Vertikaalne riba või toru sümbol |, küsimärk? tärn või täht *, plussmärk + ning avamis- ja sulgemisvoor {}. Neid erimärke nimetatakse sageli ka metamärkideks.

Siin on täielik erimärkide komplekt:

^ Rida algus
$ Rida lõpp
. Mis tahes märk (välja arvatud n uus rida)
* 0 või enam eelmist avaldist
| Vaheldus, kas üks või teine
[…] Selge tähemärkide komplekt
+ 1 või enam eelmist väljendit
? 0 või 1 eelmisest avaldisest
Sümbolile eelnev muudab selle sõna otseses mõttes
{…} Selge kvantori märge
(…) Avaldise osa loogiline rühmitamine

Vaikeversioon haaret on ainult piiratud regulaaravaldiste tugi. Kõigi järgmiste näidete toimimiseks kasutage egrep selle asemel või grep -E .

Ridade leidmiseks kasutage | sobima kummagi väljendiga:

$egrep„Xxz|xzz 'minu fail

Ridade leidmiseks kasutades | kummagi väljendi sobitamiseks stringis kasutage ka ():

$egrep'^ X(Yz|yz)'Minu fail

Ridade leidmiseks, kasutades [] mis tahes tähemärki, tehke järgmist.

$egrep'^ X[Jah]z 'minu fail

Ridade leidmiseks, kasutades [], ei vasta ühelegi tähemärgile:

$egrep'^ X[^ Jah]z 'minu fail

Kui soovite leida ridu, kasutades *, et see vastaks eelmisele avaldisele 0 või enamaga:

$egrep'^Xy*z 'minu fail

Kui soovite leida ridu, kasutades +, et vastata ühele või enamale eelmisele avaldisele:

$egrep'^Xy+z' minu fail

Et leida ridu, kasutades? vastama eelmisele avaldisele 0 või 1:

$egrep'^Xy? Z' minu fail

Harjutus III

  1. Leidke kõik nimed sisaldavad read Evans või maalikunstnik failis inimesed.
  2. Leidke kõik nimed sisaldavad read Smith, Smyth või Smythe failis inimesed.
  3. Leidke kõik nimed sisaldavad read Pruun, Browen või Allikas failis inimesed. Kui teil on aega:
  4. Leidke rida, mis sisaldab stringi (admin), sealhulgas sulgud, failis inimesed.
  5. Leidke failist inimesed rida, mis sisaldab märki *.
  6. Mõlema avaldise leidmiseks ühendage ülaltoodud punktid 5 ja 6.

Veel näiteid

Ridade leidmiseks kasutades . ja * mis tahes tähemärkide sobitamiseks:

$egrep'^Xy.*z 'minu fail

Ridade leidmiseks, kasutades klahvi {}, et see vastaks N arvule tähemärke:

$egrep'^Xy{3}z 'minu fail
$egrep'^Xy{4}z 'minu fail

Ridade leidmiseks, kasutades klahvi {}, et sobitada N või rohkem korda:

$egrep'^Xy{3,}z 'minu fail

Ridade leidmiseks, kasutades klahvi {}, et sobitada N korda, kuid mitte rohkem kui M korda:

$egrep'^Xy{2,3}z 'minu fail

Järeldus

Selles õpetuses vaatasime kõigepealt kasutamist haaret teksti leidmiseks failist või mitmest failist lihtsal kujul. Seejärel ühendasime otsitava teksti lihtsate ja seejärel keerukamate regulaaravaldistega egrep .

Järgmised sammud

Loodan, et kasutate siin saadud teadmisi hästi. Proovi järgi haaret käske oma andmetel ja pidage meeles, et siin kirjeldatud regulaaravaldisi saab kasutada samas vormis meie , sed ja awk !

Harjutuslahendused

Harjutus I

Kõigepealt loendage, mitu rida on failis /etc/passwd .
$ wc -l /etc/passwd
Nüüd otsige üles kõik teksti esinemised kus failis /etc /passwd.
$ grep var /etc/passwd
Leidke, mitu rida failis teksti sisaldab kus

haaret -ckus/jne/passwd

Leidke, mitu rida teksti EI sisalda kus .

haaret -cvkus/jne/passwd

Leidke oma sisselogimiseks kirje jaotisest /etc/passwd faili
grep kdm /etc/passwd

Harjutus II

Kuva fail inimesed ja uurige selle sisu.
$ cat people
Leidke kõik stringid sisaldavad read Smith failis inimesed .
$ grep 'Smith' people
Looge uus fail, nimesed , mis sisaldab kõiki ridu, mis algavad stringiga Isiklik aastal inimesed faili
$ grep '^Personal' people> npeople
Kinnitage faili sisu nimesed faili loetledes.
$ cat npeople
Nüüd lisage stringile kõik read, kus tekst lõpeb 500 failis inimesed faili juurde nimesed .
$ grep '500$' people>>npeople
Jällegi kinnitage faili sisu nimesed faili loetledes.
$ cat npeople
Leidke faili salvestatud serveri IP -aadress /etc/hosts .
$ grep $(hostname) /etc/hosts
Kasutamine egrep välja võtta /etc/passwd failikonto read, mis sisaldavad lp või oma kasutaja ID.
$ egrep '(lp|kdm:)' /etc/passwd

Harjutus III

Leidke kõik nimed sisaldavad read Evans või maalikunstnik failis inimesed .
$ egrep 'Evans|Maler' people
Leidke kõik nimed sisaldavad read Smith , Smyth või Smythe failis inimesed .
$ egrep 'Sm(i|y)the?' people
Leidke kõik nimed sisaldavad read Pruun , Browen või Allikas failis inimesed.
$ egrep 'Brow?e?n' people
Leidke rida, mis sisaldab stringi (admin), sealhulgas sulgud, failis inimesed .

$egrep ' (Administraator )'inimesed

Leidke tähemärki sisaldav rida * failis inimesed.
$ egrep '*' people
Mõlema avaldise leidmiseks ühendage ülaltoodud punktid 5 ja 6.

$egrep ' (Administraator ) | *'inimesed