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 failVärvide kasutamine
Värvide kuvamiseks kasutage –värvi (topelt sidekriips) või looge lihtsalt varjunimi. Näiteks:
$haaret --värvxyz minu failvõ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
- Kõigepealt loendage, mitu rida on failis /etc /passwd.
- Nüüd otsige üles kõik teksti esinemised kus failis /etc /passwd .
- Leidke, mitu rida failis teksti sisaldab
- Leidke, mitu rida teksti EI sisalda kus .
- 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 failKõikide tekstiga lõppevate ridade leidmiseks märgi $ abil tehke järgmist.
$haaret'Xyz $' minu failNii ^ kui ka $ märke sisaldavate stringide leidmiseks toimige järgmiselt.
$haaret'^Xyz $' minu failRidade leidmiseks kasutage . mis tahes tegelasega sobitamiseks:
$haaret'^X.z' minu failKui soovite leida ridu, kasutades *, et see vastaks eelmisele avaldisele 0 või enamaga:
$haaret'^Xy*z 'minu failRidade leidmiseks klahvi* abil, mis vastavad mis tahes tähemärgile 0 või enam, tehke järgmist.
$haaret'^ X.*z 'minu failRidade leidmiseks kasutage * tähemärgist pääsemiseks:
$haaret'^ X *z 'minu failMärgi leidmiseks kasutage järgmist.
$haaret'\' minu failVä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 |
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/passwdKuid enamikus Linuxi süsteemides on käsk grep -E on sama mis kasutamine egrep :
$haaret -JA '(^juur |^uucp |^post)' /jne/passwdFiltrite 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'|rohkemJärgmised käsud on filtrite kasutamise näited:
$ps -liha|haaretcron $WHO|haaretkdmNä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 25000Isiklik 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
- Kuva fail inimesed ja uurige selle sisu.
- Leidke kõik stringid sisaldavad read Smith failis inimesed. Vihje: kasutage käsku grep, kuid pidage meeles, et vaikimisi on see tõstutundlik.
- Looge uus fail, npeople, mis sisaldab kõiki ridu, mis algavad stringiga Isiklik inimeste failis. Vihje: kasutage käsku grep koos>.
- Kinnitage faili sisu inimestega, loetledes faili.
- Nüüd lisage stringile kõik read, kus tekst lõpeb 500 failis inimesed faili faili npeople. Vihje: kasutage käsku grep koos >>.
- Jällegi kinnitage faili sisu inimestega, lisades faili.
- Leidke faili salvestatud serveri IP -aadress /etc/hosts . Vihje: kasutage käsku grep koos $ (hostname)
- 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 failRidade leidmiseks kasutades | kummagi väljendi sobitamiseks stringis kasutage ka ():
$egrep'^ X(Yz|yz)'Minu failRidade leidmiseks, kasutades [] mis tahes tähemärki, tehke järgmist.
$egrep'^ X[Jah]z 'minu failRidade leidmiseks, kasutades [], ei vasta ühelegi tähemärgile:
$egrep'^ X[^ Jah]z 'minu failKui soovite leida ridu, kasutades *, et see vastaks eelmisele avaldisele 0 või enamaga:
$egrep'^Xy*z 'minu failKui soovite leida ridu, kasutades +, et vastata ühele või enamale eelmisele avaldisele:
$egrep'^Xy+z' minu failEt leida ridu, kasutades? vastama eelmisele avaldisele 0 või 1:
$egrep'^Xy? Z' minu failHarjutus III
- Leidke kõik nimed sisaldavad read Evans või maalikunstnik failis inimesed.
- Leidke kõik nimed sisaldavad read Smith, Smyth või Smythe failis inimesed.
- Leidke kõik nimed sisaldavad read Pruun, Browen või Allikas failis inimesed. Kui teil on aega:
- Leidke rida, mis sisaldab stringi (admin), sealhulgas sulgud, failis inimesed.
- Leidke failist inimesed rida, mis sisaldab märki *.
- 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 failRidade 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 failRidade leidmiseks, kasutades klahvi {}, et sobitada N korda, kuid mitte rohkem kui M korda:
$egrep'^Xy{2,3}z 'minu failJä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
Leidke, mitu rida teksti EI sisalda kus .
haaret -cvkus/jne/passwdLeidke 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 .
Leidke tähemärki sisaldav rida * failis inimesed.
$ egrep '*' people
Mõlema avaldise leidmiseks ühendage ülaltoodud punktid 5 ja 6.