Sissejuhatus
Linuxi grep-käsku kasutatakse sisendi filtreerimiseks.
GREP tähistab Global Regular Expression Printerit ja seetõttu on sellel tõhusaks kasutamiseks vaja teada regulaarselt väljendusi.
Käesolevas artiklis pean näitama teile mitmeid näiteid, mis aitavad teil grep-käsku mõista.
01 of 09
Kuidas otsida stringi failis, kasutades GREP-i
Kujutage ette, et teil on tekstifail nimega raamatud, millel on järgmised lasteraamatu pealkirjad:
- Robin Hood
- Punamütsike
- Peeter Paan
- Goldilocks ja kolm karu
- Lumivalgeke ja seitse pöialpoissi
- Pinnochio
- Kass mütsis
- Kolm väikest siga
- Gruffalo
- Charlie ja šokolaaditöökoda
Pealkirja all sõna "The" all olevate raamatute leidmiseks kasutaksite järgmist süntaksi:
grep Raamatud
Saadetakse järgmised tulemused:
- Goldilocks ja kolm karu
- Lumivalgeke ja seitse pöialpoissi
- Kass mütsis
- Kolm väikest siga
- Gruffalo
- Charlie ja šokolaaditöökoda
Igal juhul esile tõstetakse sõna "The".
Pidage meeles, et otsing on tõstutundlik, nii et kui mõnel pealkirjal oleks "selle asemel", siis ei oleks seda tagastatud.
Juhtumite ignoreerimiseks võite lisada järgmise lüliti:
Raamatud - nägemata juhtudest
Võite kasutada ka -i lülitit järgmiselt:
grep-i raamatuid
02 09
Märksõnade abil stringi kasutamine failis
Grep-käsk on väga võimas. Tulemuste filtreerimiseks saate kasutada arvukalt mustrite sobitamise meetodeid.
Selles näites näitan sulle, kuidas otsida stringi faili kasutades metamärke .
Kujutage ette, et teil on fail, mida nimetatakse kohtadeks järgmiste Šotimaa kohanimedega:
Aberdeen
aberystwyth
aberlour
inverurie
inverness
Newburgh
uus hirv
uus galloway
glasgow
Edinburgh
Kui soovite leida kõik nimega inverti kohad, kasutage järgmist süntaksit:
grep inver * kohti
Tärn (*) metamärke tähistab 0 või palju. Seega, kui teil on koht, mida nimetatakse invertiks või kohaks, mida nimetatakse invernessiks, siis tagastatakse mõlemad.
Teine metamärgiks, mida saate kasutada, on ajavahemik (.). Seda saab kasutada ühe tähega ühitamiseks.
grep inver.r kohti
Eespool toodud käsk näeb kohti nimega inverurie ja inverary, kuid ei leia invereerie, sest kahe r-i vahel võib olla ainult üks märk, mida tähistab üks periood.
Perioodi metamärke on kasulik, kuid see võib põhjustada probleeme, kui teil on see üks osa otsitavast tekstist.
Näiteks vaadake seda domeeninimede loendit
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Selleks, et leida kõiki about.comsid, võite otsida järgmiste süntaksite abil:
grep * umbes * domainnames
Eespool toodud käsk langeks, kui loend sisaldas selles järgmist nime:
- everydaylinuxuser.com/about.html
Seetõttu võiksite proovida järgmist süntaksit:
grep * about.com domainnames
See toimiks hästi, kui ei oleks domeeni, millel oleks järgmine nimi:
aboutycom.com
Selleks, et otsida termini about.com, peaksite punktist põgenema järgmiselt:
grep * umbes \ .com domainnames
Lõplik näidik, mis näitab teile, on küsimärk, mis tähistab nulli või ühte tähemärki.
Näiteks:
grep ber platsanimed
Eelnimetatud käsk tagastaks aberdeeni, aberystwythi või isegi berwicki.
03 alates 09
Otsi joonist alguses ja lõpus liinil, kasutades grep
Karaat (^) ja dollar ($) sümbol võimaldavad otsida mustreid joonte alguses ja lõpus.
Kujutage ette, et teil on futuurifail, millel on järgmised meeskonna nimed:
- Blackpool
- Liverpool
- Manchester City
- Leicester City
- Manchester United
- Newcastle United
- FC United of Manchester
Kui soovite leida kõiki Manchesteri alanud meeskondi, kasutaksite järgmisi süntaksit:
grep ^ Manchesteri meeskonnad
Eespool nimetatud käsk tagastaks Manchester City ja Manchester United, kuid mitte FC United of Manchester.
Alternatiivina võite leida kõik meeskonnad, kes lõppevad Unitediga, kasutades järgmist süntaksit:
Grep United $ meeskonnad
Ülaltoodud käsk tagastaks Manchester United ja Newcastle United, kuid mitte FC United Of Manchester.
04 09
Kasutades grep-i kasutades sobivate arvude arvu
Kui te ei soovi grep-i abil graafi järgi joonistada jooni, vaid soovite teada, kui palju neid on, võite kasutada järgmist süntaksi:
grep -c mustri sisendfail
Kui muster vastab kaks korda, siis number 2 tagastatakse.
05 09
Leidke kõik tingimused, mis ei sobi, kasutades grap
Kujutage ette, et teil on kohalike nimede loend loetletud riikidega:
- Aberdeen Scotland
- Glasgow Scotland
- Liverpooli Inglismaa
- Colwyn Bay
- Londoni Inglismaa
Võib-olla olete märganud, et Colwyn Bay'il ei ole sellega seotud riiki.
Et otsida kõiki kohti riigiga, võite kasutada järgmist süntaksit:
Grep maa $ kohti
Tulemused toovad välja kõik kohad, välja arvatud Colwyni laht.
See ilmselt toimib ainult kohtades, mis lõpevad maal (peaaegu teaduslik).
Võite valida, kasutades järgmist süntaksit:
grep -v maa $ kohti
See leiab kõik kohad, mis ei lõpe maaga.
06 alates 09
Kuidas leida grep-failides tühje ridu failides
Kujutage ette, et teil on sisendfail, mida kasutab kolmanda osapoole rakendus, mis peatab faili lugemise, kui ta leiab tühja reana järgmiselt:
- Aberdeen Scotland
- Inverness Scotland
- Liverpooli Inglismaa
- colwyn lahe wales
Kui rakendus jõuab Liverpooli jooneni, siis lõpetab see lugemise, mis tähendab, et Colwyni laht jäetakse täielikult ära.
Võite kasutada grep, et otsida tühja ridu järgmise süntaksiga:
grep ^ $ kohti
Kahjuks pole see eriti kasulik, kuna see lihtsalt tagastab tühjad read.
Loomulikult saate tühikutega arvu lugeda kontrollimaks, kas fail on kehtiv järgmiselt:
grep -c ^ $ kohad
Siiski oleks kasulikum teada rida numbritega, millel on tühi rida, nii et saate neid asendada. Seda saab teha järgmise käsuga:
grep-n ^ $ kohad
07 09
Kuidas otsida võtmeid suurte või väiketähtedega, kasutades grep
Kasutades grep, saate määrata, millised read failis on suurtähtedega, kasutades järgmist süntaksit:
grep '[AZ]' failinimi
Nurksulgud [] võimaldavad teil määrata tähemärkide vahemiku. Eespool toodud näites vastab see igale tähemärgile, mis asub A ja Z vahel.
Seetõttu saab väiketähtede vasteid kasutada järgmises süntaksis:
grep '[az]' failinimi
Kui soovite sobitada ainult tähte, mitte numbrilisi või muid sümboleid, võite kasutada järgmist süntaksit:
grep '[a-zA-Z]' failinimi
Te saate sama teha numbritega järgmiselt:
grep '[0-9]' failinimi
08, 09
Otsides korduvaid mustreid kasutades grep
Korduva mustri otsimiseks võite kasutada lokkide sulgudes {}.
Kujutage ette, et teil on telefoninumbritega fail järgmiselt:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Teate, et numbri esimene osa peab olema kolm numbrit ja soovite leida read, mis ei vasta sellele mustrile.
Eelmises näites teate, et [0-9] tagastab kõik numbrid faili.
Selles näites soovime read, mis algavad kolme numbriga, millele järgneb sidekriips (-). Seda saab teha järgmise süntaksiga:
grep "^ [0-9] [0-9] [0-9] -" numbrid
Nagu eelmistest näidetest teame, tähendab karaat (^), et joon peab algama järgmise mustriga.
[0-9] otsib mis tahes numbrit vahemikus 0 ja 9. Kuna see on kolm korda lisatud, vastab see 3 numbrile. Lõpuks on sidekriips, mis näitab, et triipkood peab kolm numbrit saama.
Lüümiku sulgudes kasutades saate otsingu väiksemaks muuta järgmiselt:
grep "^ [0-9] \ {3 \} -" numbrid
Kaldkriips kaob {bracket'ist nii, et see toimib regulaaravaldise osana, kuid sisuliselt on see [0-9] {3}, mis tähendab mis tahes numbrit, mis on vahemikus 0 kuni 9 kolm korda.
Lüünikuid 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 seda, et märgi tuleb korrata vähemalt 5 korda, kuid see võib olla suurem kui see.
09 09
Kasutades väljundit muudest käskudest, kasutades grep
Siiani oleme vaatanud üksikute failide jaoks mustrite sobivust, kuid grep saab kasutada muudest käskudest pärinevat väljundit kui mustri sobitamise sisendit.
Selle suurepärane näide on aktiivse protsessi loendis käiva käsiraamatu kasutamine ps.
Näiteks käivitage järgmine käsk:
ps -ef
Kõik teie süsteemis töötavad protsessid kuvatakse.
Võite kasutada grep, et otsida konkreetset tööprotsessi järgmiselt:
ps -ef | grep firefox