Ekzemploj Uzoj De La Linukso grep Komando

Enkonduko

La Linukso grep-komando estas uzata kiel metodo por filtrila enigo.

GREP staras pri Tutmonda Regula Esprimo Presilo kaj sekve por uzi ĝin efike, vi devus havi iun scion pri regulaj esprimoj.

En ĉi tiu artikolo mi montros al vi kelkajn ekzemplojn, kiuj helpos vin kompreni la grep-komandon.

01 de 09

Kiel Serĉi Ŝnuron En Arkivo Uzanta GREP

La Linukso grep-komando.

Imagu, ke vi havas tekston-dosieron nomitan librojn kun la jenaj libroj de la infanoj:

Por trovi ĉiujn librojn kun la vorto "La" en la titolo, vi uzus la jenan sintakson:

grep La libroj

La jenaj rezultoj estos redonitaj:

En ĉiu kazo, la vorto "La" estos reliefigita.

Rimarku, ke la serĉo estas kazema sentema, do se unu el la titoloj havis "la" anstataŭ "La", tiam ĝi ne estus redonita.

Por ignori la kazon vi povas aldoni la sekvan ŝaltilon:

kolektu la librojn --ignore-case

Vi ankaŭ povas uzi la -i ŝaltilon kiel sekvas:

grep -i la libroj

02 de 09

Serĉu Stringon en dosiero per kartoj

La grep-komando estas tre potenca. Vi povas uzi amason da ŝablonaj kongruaj teknikoj por filtri rezultojn.

En ĉi tiu ekzemplo, mi montros al vi kiel serĉi ĉenon en dosiero per kartoj .

Imagu, ke vi havas dosieron nomitan lokojn kun la jenaj skotaj loknomoj:

aberdeen

aberystwyth

aberlour

inverso

inverso

Newburgh

nova cervo

nova galloway

glasgow

Edimburgo

Se vi volas trovi ĉiujn lokojn per inverso en la nomo, uzu la jenan sintakson:

grep inver * lokoj

La asterisko (*) bildkarto staras por 0 aŭ multaj. Sekve, se vi havas lokon nomatan inverso aŭ loko nomata inverso tiam ambaŭ estus revenitaj.

Alia karton vi povas uzi estas la periodo (.). Vi povas uzi ĉi tion por egali unu literon.

grep inver.r lokoj

La supre komando trovus lokojn nomitan inverŝe kaj inveraj sed ne trovus invadojn ĉar nur povas esti unu sindikato inter la du r kiel signifita de la sola periodo.

La periodkarto estas utila sed ĝi povas kaŭzi problemojn, se vi havas unu el la tekstoj, kiujn vi serĉas.

Ekzemple rigardu ĉi tiun liston de domajnaj nomoj

Por trovi ĉiujn informojn, vi nur povas serĉi uzante la jenan sintakson:

grep * pri * domainnames

La supre komando falus se la listo enhavis la sekvan nomon en ĝi:

Vi povus do provi la sekvan sintakson:

grep * pri.Com Domainnames

Ĉi tio funkcios bone, se ne estus regado kun la sekva nomo:

priycom.com

Por vere serĉi la terminon pri.Com vi devus eskapi la punkton kiel sekvas:

grep * pri \ .com domainnames

La fina bildkarto por montri al vi estas la demando marko, kiu staras por nulo aŭ unu karaktero.

Ekzemple:

gepatraj nomoj

La supre komando redonus aberdeen, aberystwyth aŭ eĉ berwick.

03an de 09

Serĉu Strings At The Beginning And End Of Line Uzanta grep

La kara (^) kaj la dolaro ($) simbolo permesas al vi serĉi ŝablonojn ĉe la komenco kaj fino de linioj.

Imagu, ke vi havas dosieron nomitan futbalon kun la jenaj teamnomoj:

Se vi volus trovi ĉiujn teamojn, kiuj komencis kun Manchester vi uzus la jenan sintakson:

grep ^ Manchester teamoj

La supre komando redonus Manchester City kaj Manchester United sed ne FC United Of Manchester.

Alternative vi povas trovi ĉiujn teamojn finantajn kun Kunigita uzanta la jenan sintakson:

grep United $ teamoj

La supre komando redonus Manchester United kaj Newcastle United sed ne FC United Of Manchester.

04 de 09

Kalkulanta La Nombro De Matĉoj Uzanta grep

Se vi ne volas redoni la realan linion, kiu kunigas ŝablonon per grep sed vi nur volas scii kiom vi povas uzi la sekvan sintakson:

grep -c ŝablono inputfile

Se la ŝablono estis egalita dufoje tiam la numero 2 estus redonita.

05 de 09

Trovanta ĉiujn la terminojn, kiuj ne kongruas uzante grep

Imagu, ke vi havas liston de loknomoj kun la landoj listigitaj kiel sekvas:

Vi eble rimarkis, ke kolonio-golfeto havas neniun landon asociitan kun ĝi.

Por serĉi ĉiujn lokojn kun lando, vi povus uzi la jenan sintakson:

grep tero $ lokoj

La rezultoj redonas estus ĉiuj lokoj krom golfeto.

Ĉi tio evidente nur funkcias por lokoj, kiuj finiĝas en tero (apenaŭ sciencaj).

Vi povas renversi la elektitan uzadon de la sekva sintakso:

grep -v lando $ lokoj

Ĉi tio trovus ĉiujn lokojn, kiuj ne finiĝis kun tero.

06 de 09

Kiel Trovi Malplenajn Liniojn En Dosieroj Uzanta Grep

Imagu, ke vi havas eniga dosiero, kiu estas uzata de tria aplikaĵo, kiu ĉesas legi la dosieron kiam ĝi trovas malplenan linion kiel sekvas:

Kiam la apliko atingas la linion post liverpool, ĝi ĉesos legi la signifon de kolonio-golfeto tute maltrafita.

Vi povas uzi grep por serĉi malplenajn liniojn kun la sekva sintakso:

grep ^ $ lokoj

Bedaŭrinde ĉi tio ne estas speciale utila ĉar ĝi simple redonas la malplenajn liniojn.

Vi povus kompreneble akiri kalkulon de la nombro da malplenaj linioj kiel kontrolo por vidi ĉu la dosiero estas valida kiel sekvas:

grep -c ^ $ lokoj

Tamen estus pli utila scii la liniojn de la linio, kiuj havas malplenan linion por ke vi povu anstataŭigi ilin. Vi povas fari tion per la sekva komando:

grep -n ^ $ lokoj

07 de 09

Kiel Serĉi Ŝnurojn De Kontraŭa Aŭ Malsupra Karakteroj Uzanta grep

Uzante grep vi povas determini kiun linioj en dosiero havas plej grandajn karakterojn uzante la jenan sintakson:

grep '[AZ]' dosiernomo

La kvadrataj krampoj [] permesas determini la gamon de signoj. En la supra ekzemplo ĝi kongruas kun iu karaktero inter A kaj Z.

Sekve, por kongrui minusklajn signojn, vi povas uzi la jenan sintakson:

grep '[az]' dosiernomo

Se vi volas egali nur leterojn kaj ne nombrojn aŭ aliajn simbolojn, vi povas uzi la jenan sintakson:

grep '[a-zA-Z]' dosiernomo

Vi povas fari la saman kun nombroj kiel sekvas:

grep '[0-9]' dosiernomo

08 de 09

Serĉante Ripeti Ŝablonojn Uzante grep

Vi povas uzi buklajn krampojn {} por serĉi ripetantan ŝablonon.

Imagu, ke vi havas dosieron per telefonaj nombroj kiel sekvas:

Vi scias, ke la unua parto de la nombro devas esti tri ciferoj kaj vi volas trovi la liniojn, kiuj ne kongruas ĉi tiun mastron.

De la antaŭa ekzemplo vi scias, ke [0-9] redonas ĉiujn nombrojn en dosiero.

En ĉi tiu petskribo ni deziras la liniojn, kiuj komenciĝas per tri nombroj sekvitaj per fendo (-). Vi povas fari tion kun la sekva sintakso:

grep "^ [0-9] [0-9] [0-9] -" nombroj

Kiel ni scias de antaŭaj ekzemploj, la karo (^) signifas, ke la linio devas komenci per la sekva ŝablono.

La [0-9] serĉos iun ajn numeron inter 0 kaj 9. Kiel ĉi tio estas inkluzivita tri fojojn ĝi kongruas kun 3 nombroj. Finfine estas fendo por indiki, ke krapo devas sukcesi la tri nombrojn.

Uzante la buklajn krampojn vi povas fari la serĉon pli malgranda kiel sekvas:

grep "^ [0-9] \ {3 \} -" nombroj

La ŝelo eskapas de la krampo por ke ĝi funkciu kiel parto de la regula esprimo sed en esenco, kion ĉi tio diras, estas [0-9] {3} kiu signifas iujn numerojn inter 0 kaj 9 tri fojojn.

La buklaj krampoj povas ankaŭ esti uzataj kiel sekvas:

{5,10}

{5,}

La {5,10} signifas, ke la karaktero serĉata devas esti ripetita almenaŭ 5 fojojn sed ne pli ol 10, sed la {5} signifas, ke la karaktero devas esti ripetita almenaŭ 5 fojojn, sed ĝi povas esti pli ol tio.

09 de 09

Uzado de Eligo de aliaj komandoj Uzante grep

Ĝis nun ni rigardis ŝablonon-kongruon ene de individuaj dosieroj, sed grep povas uzi la eligo de aliaj komandoj kiel la enigo por ŝablonoj.

Granda ekzemplo de tio uzas la pskomandon, kiu listigas aktivajn procezojn.

Ekzemple kuru la sekvantan komandon:

ps -ef

Ĉiuj elkuraj procezoj de via sistemo montriĝos.

Vi povas uzi grep serĉi apartan kuran procezon kiel sekvas:

ps -ef | grep firefox

Resumo

La grep-komando estas fundamenta Linukso-komando, kaj ĝi estas bone valora lernado, ĉar ĝi faros vian vivon multe pli facila kiam vi serĉos dosierojn kaj procezojn kiam vi uzas la fina stacion.