Linuxi grep käsu kasutamise näide
Linuxi grep-käsku kasutatakse sisendi filtreerimise meetodina. GREP tähistab globaalset regulaaravaldise printerit ja seetõttu peaksid selle tõhusaks kasutamiseks olema regulaaravaldiste kohta mõned teadmised.
Sellest artiklist saate teada mitmeid näiteid, mis aitavad teil grep-käsku mõista.
Kuidas GREP-i abil failist stringi otsida

Kujutage ette, et teil on tekstifail nimega raamatud järgmiste lasteraamatute pealkirjadega:
- Robin Hood
- Punamütsike
- Peeter Paan
- Kuldvillak ja Kolm karu
- Lumivalgeke ja seitse pöialpoissi
- Pinnochio
- Kass mütsis
- Kolm põrsakest
- Gruffalo
- Charlie ja šokolaadivabrik
Kõigi raamatute leidmiseks, mille pealkirjas on sõna "The", kasutage järgmist süntaksit:
grep Raamatud.
Järgmised tulemused tagastatakse:
Kuldvillak ja Kolm karu
Lumivalgeke ja seitse pöialpoissi
Kass mütsis
Kolm põrsakest
Gruffalo
Charlie ja šokolaadivabrik.
Igal juhul tõstetakse esile sõna "The".
Otsing on tõstutundlik, nii et kui ühes pealkirjas oleks "The" asemel "the", poleks seda tagastatud.
Juhtumi ignoreerimiseks saate lisada järgmise lüliti:
grep the books -- ignore-case.
Võite kasutada ka lülitit -i järgmiselt.
grep -i raamatud.
Otsige failist stringi regulaaravaldiste abil
Käsk grep on väga võimas. Tulemuste filtreerimiseks saate kasutada paljusid mustrite sobitamise tehnikaid.
Selles näites näitame teile, kuidas otsida failist metamärke kasutades stringi.
Kujutage ette, et teil on fail kohad järgmiste Šotimaa kohanimedega:
aberdeen
Aberystwyth
aberlour
inverurie
inverness
Newburgh
uus hirv
uus galloway
glasgow
Edinburgh.
Kui soovite leida kõik kohad, mille nimes on inver, kasutage järgmist süntaksit:
grep inver* kohad.
Tärn (*) ei tööta nii nagu tavalises Bashis. Regulaaravaldistega tegeleva grepi kontekstis käitub tärn erinevalt. Selle asemel, et sobitada mis tahes märke või mitte ühtegi tähemärki, nagu näiteks Bash, sobitab see sisestatud mustriga ja selle mustri mis tahes järgnevate korduste või mitte.
Ülaltoodud näites vastab see:
inverurie
inverness.
kuna need mõlemad sisaldavad sisestatud mustrit "inver" pluss selle mustri null täiendavat kordust. Selle uuesti selgemaks nägemiseks lisage:
kordusinverinverinver.
nimekirja juurde. Ei, sellel pole erilist mõtet, kuid see näitab, kuidas tärn töötab. Proovige käsku uuesti käivitada.
grep inver* kohad.
Kas näete uut rida? Bashis see ei töötaks, aga siin töötab.
Asjade veelgi kummalisemaks muutmiseks käivitage käsk ilma tärnita.
grep inver kohad.
Tulemused on samad. Vaikimisi otsib grep mustrit igast kohast, kus see tekstistringis kuvatakse. Samuti ei tee vahet, mitu korda see ilmub.
Teine metamärk, mida saate kasutada, on punkt (.). Saate seda kasutada ühe tähe sobitamiseks.
grep inver.r kohtades.
Ülaltoodud käsk leiaks kohad nimega inverurie ja inverary, kuid ei leia invereerie, kuna kahe r-i vahel saab olla ainult üks metamärk, mida tähistab üks punkt.
Perioodi metamärk on kasulik, kuid see võib põhjustada probleeme, kui see on otsitavas tekstis.
Näiteks vaadake seda domeeninimede loendit.
- linux.lifewire.com
- pcsupport.lifewire.com
- mp3.lifewire.com
- minecraft.lifewire.com
- androidgames.lifewire.com
- netforbeginners.lifewire.com
- dailylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
- fakesite.lifewire1com.com
Kõigi lifewire.com-i URL-ide leidmiseks võite lihtsalt otsida, kasutades järgmist süntaksit:
grep .com domeeninimed.
Ülaltoodud käsk kukub alla, kui loendis oleks järgmine nimi:
dailylinuxuser.com.
Seetõttu võite proovida järgmist süntaksit:
grep lifewire.com domeeninimed.
See toimiks hästi, kui pole järgmise nimega domeen:
fakesite.lifewire1com.com.
Termini lifewire.com otsimiseks peate täpist välja jätma järgmiselt:
grep lifewire\\.com domeeninimed.
Viimane metamärk, mis teile näidatakse, on küsimärk, mis tähistab nulli või ühte tähemärki.
Näiteks:
grep -E ?ber kohanimed.
Ülaltoodud käsk tagastaks aberdeeni, aberystwythi või isegi berwicki, kui see oleks loendis. Pange tähele ka täiendavat "-E" lippu. Grep ei tunne ära? märk ilma, et see võimaldaks laiendatud regulaaravaldise tuge.
Otsige stringe rea algusest ja lõpust, kasutades grep
Karaat (^) ja dollari ($) sümbol võimaldavad teil otsida mustreid ridade algusest ja lõpust.
Kujutage ette, et teil on fail nimega jalgpall järgmiste meeskonnanimedega:
- Blackpool
- Liverpool
- Manchester City
- Leicester City
- Manchester United
- Newcastle United
- Manchesteri FC United
Kui soovite leida kõik Manchesteriga alustanud meeskonnad, kasutage järgmist süntaksit:
grep ^ Manchesteri meeskonnad.
Ülaltoodud käsk tagastaks Manchester City ja Manchester Unitedi, kuid mitte Manchesteri FC Unitedi.
Teise võimalusena leiate kõik meeskonnad, mis lõpevad Unitediga, kasutades järgmist süntaksit:
grep United$ meeskonnad.
Ülaltoodud käsk naaseb Manchester Unitedile ja Newcastle Unitedile, kuid mitte Manchester Unitedile.
Vastete arvu loendamine, kasutades grep
Kui te ei soovi grepi abil tagastada tegelikke jooni, mis vastavad mustrile, kuid soovite lihtsalt teada, kui palju neid on, võite kasutada järgmist süntaksit:
grep -c mustri sisendfail.
Kui muster sobitati kaks korda, tagastatakse number 2.
Kõigi mittevastavate tingimuste leidmine grep abil
Kujutage ette, et teil on kohanimede loend, mille riigid on loetletud järgmiselt:
- aberdeen Šotimaa
- Glasgow Šotimaa
- Liverpool Inglismaa
- colwyni laht
- London Inglismaa
Võib-olla olete märganud, et Colwyn Bay'ga pole seotud ühtegi riiki.
Kõigi riigiga kohtade otsimiseks võite kasutada järgmist süntaksit:
grep maa$ kohad.
Tulemused tagastavad kõik kohad, välja arvatud Colwyn Bay.
Ilmselgelt töötab see ainult maaga lõppevate kohtade puhul (vaevalt teaduslik).
Saate valiku ümber pöörata, kasutades järgmist süntaksit:
grep -v maa$ kohad.
See leiaks kõik kohad, mis ei lõpe maaga.
Kuidas leida failides tühje ridu, kasutades grep
Kujutage ette, et teil on sisendfail, mida kasutab kolmanda osapoole rakendus, mis peatab faili lugemise, kui leiab tühja rea järgmiselt:
- aberdeen šotimaa
- inverness šotimaa
- Liverpool Inglismaa
- colwyn Bay Wales
Kui rakendus jõuab Liverpooli järel reale, lõpetab see lugemise, mis tähendab, et colwyn bay jääb täielikult vahele.
Võite kasutada grep-i tühjade ridade otsimiseks järgmise süntaksiga:
grep ^$ kohta.
See pole eriti kasulik, kuna tagastab lihtsalt tühjad read.
Muidugi võite kontrollida tühjade ridade arvu, et näha, kas fail on kehtiv järgmiselt:
grep -c ^$ kohta.
Kasulikum oleks aga teada reanumbreid, millel on tühi rida, et saaksite need asendada. Seda saate teha järgmise käsuga:
grep -n ^$ kohta.
Suur- ja väiketähtede stringide otsimine grepi abil
Grepi abil saate määrata, millistel faili ridadel on suurtähti, kasutades järgmist süntaksit:
grep '[A-Z]' failinimi.
Nurksulgud [] võimaldavad määrata tähemärkide vahemikku. Ülaltoodud näites sobib see iga tähemärgiga, mis jääb A ja Z vahele.
Seetõttu võite väiketähtede sobitamiseks kasutada järgmist süntaksit:
grep '[a-z]' failinimi.
Kui soovite sobitada ainult tähti, mitte numbreid ega muid sümboleid, võite kasutada järgmist süntaksit:
grep '[a-zA-Z]' failinimi.
Sama saate teha numbritega järgmiselt:
grep '[0-9]' failinimi.
Korduvate mustrite otsimine kasutades grep
Korduva mustri otsimiseks saate kasutada lokkis sulgusid {}.
Kujutage ette, et teil on fail järgmiste telefoninumbritega:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Teate, et numbri esimene osa peab olema kolmekohaline ja soovite leida read, mis sellele mustrile ei vasta.
Eelmisest näitest teate, et [0-9] tagastab kõik failis olevad numbrid.
Sel juhul tahame ridu, mis algavad kolme numbriga, millele järgneb sidekriips (-). Seda saate teha järgmise süntaksiga:
grep "^[0-9][0-9][0-9]-" numbrid.
Nagu eelmistest näidetest teame, tähendab karaat (^), et rida peab algama järgmise mustriga.
[0-9] otsib mis tahes arvu vahemikus 0 kuni 9. Kuna see sisaldub kolm korda, vastab see 3 numbrile. Lõpuks on sidekriips, mis näitab, et sidekriips peab järgnema kolmele numbrile.
Kasutades lokkis sulgusid, saate otsingut väiksemaks muuta järgmiselt:
grep "^[0-9]\{3\}-" numbrid.
Kaldkriips väljub {-sulust, nii et see töötab regulaaravaldise osana, kuid sisuliselt on see [0-9]{3}, mis tähendab kolm korda suvalist arvu vahemikus 0 kuni 9.
Lokkis sulgusid saab kasutada ka järgmiselt:
{5,10}
{5,}
{5,10} tähendab, et otsitavat tähemärki tuleb korrata vähemalt 5 korda, kuid mitte rohkem kui 10, samas kui {5,} tähendab, et tähemärki tuleb korrata vähemalt 5 korda, kuid see võib olla rohkem kui et.
Teiste käskude väljundi kasutamine Grep
Siiani oleme vaadanud mustrite sobitamist üksikute failide sees, kuid grep võib mustrite sobitamiseks kasutada teiste käskude väljundit.
Suurepärane näide sellest on käsu ps kasutamine, mis loetleb aktiivsed protsessid.
Näiteks käivitage järgmine käsk:
ps -ef.
Kuvatakse kõik teie süsteemis töötavad protsessid.
Konkreetse tööprotsessi otsimiseks saate kasutada grep-i järgmiselt.
ps -ef | grep firefox.
Kokkuvõte
Käsk grep on põhiline Linux käsk ja see on üks, mida tasub õppida, kuna see muudab teie elu terminali kasutamisel failide ja protsesside otsimisel palju lihtsamaks.