Näide kasutab Linuxi grep Command'it

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

Linux grep Command.

Kujutage ette, et teil on tekstifail nimega raamatud, millel on järgmised lasteraamatu pealkirjad:

Pealkirja all sõna "The" all olevate raamatute leidmiseks kasutaksite järgmist süntaksi:

grep Raamatud

Saadetakse järgmised tulemused:

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

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:

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:

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:

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:

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:

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

Kokkuvõte

Grep-käsk on Linuxi põhiline käsk ja see on õppimisele hästi väärt, kuna see muudab teie elu terminali kasutamisel failide ja protsesside otsimisel palju lihtsamaks.