Kuna tofauti gani kati ya Grep, Egrep na Fgrep kwenye Linux?


Mojawapo ya zana mashuhuri ya utaftaji kwenye mifumo kama ya Unix ambayo inaweza kutumika kutafuta chochote iwe faili, au laini au mistari mingi kwenye faili ni matumizi ya grep. Ni pana sana katika utendakazi ambao unaweza kuhusishwa na idadi kubwa ya chaguo inayotumika kama vile: kutafuta kwa kutumia muundo wa kamba, au muundo wa reg-ex au perl based reg-ex n.k.

Kwa sababu ya utendakazi wake tofauti, ina anuwai nyingi ikijumuisha grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) n.k. Lakini anuwai hizi zina tofauti ndogo na grep asili ambayo imezifanya. maarufu na kutumiwa na watengenezaji programu mbalimbali wa Linux kwa kazi maalum.

Jambo kuu ambalo linabaki kuchunguzwa ni tofauti gani kati ya lahaja tatu kuu yaani 'grep', 'egrep' na 'fgrep' ya grep ambayo huwafanya watumiaji wa Linux kuchagua toleo moja au lingine kulingana na mahitaji.

Baadhi ya Herufi Maalum za Meta za grep

  1. + - Sawa na tukio moja au zaidi la herufi iliyotangulia.
  2. ? - Hii inaashiria karibu marudio 1 ya herufi iliyotangulia. Kama: a? Inaweza kulingana na ‘a’ au ‘aa’.
  3. ( - Mwanzo wa usemi mbadala.
  4. ) - Mwisho wa usemi mbadala.
  5. | - Inalingana na mojawapo ya usemi uliotenganishwa na |. Kama vile: \(a|b)cde” ingelingana na ama ‘abcde’ au ‘bbcde’.
  6. { - Meta herufi hii inaonyesha mwanzo wa kibainishi cha masafa. Kama vile: \a{2} inalingana na \aa katika faili yaani mara 2.
  7. } - Meta herufi hii inaonyesha mwisho wa kibainishi cha masafa.

Tofauti kati ya grep, egrep na fgrep

Baadhi ya tofauti kuu kati ya grep, egrep na fgrep zinaweza kuangaziwa kama ifuatavyo. Kwa seti hii ya mifano tunachukulia faili ambayo operesheni inafanywa kuwa:

grep au Global Regular Expression Print ndio programu kuu ya utaftaji kwenye mifumo kama ya Unix ambayo inaweza kutafuta aina yoyote ya kamba kwenye faili yoyote au orodha ya faili au hata matokeo ya amri yoyote.

Inatumia Vielezi vya Msingi vya Kawaida kando na mifuatano ya kawaida kama mchoro wa utafutaji. Katika Maonyesho ya Kawaida ya Kawaida (BRE), meta-herufi kama: {,},(,),|,+,? hupoteza maana yake na huchukuliwa kama herufi za kawaida za uzi na zinahitaji kuepukwa ikiwa zitachukuliwa kama herufi maalum.

Pia, grep hutumia algoriti ya Boyer-Moore kwa kutafuta haraka kamba yoyote au usemi wa kawaida.

$ grep -C 0 '(f|g)ile' check_file
$ grep -C 0 '\(f\|g\)ile' check_file

Kama hapa, amri inapoendeshwa bila kutoroka ( ) na | basi ilitafuta mfuatano kamili yaani \(f|g)ile” kwenye faili. Lakini herufi maalum zilipotoroshwa, basi badala ya kuzichukulia kama sehemu ya uzi, grep ilizichukulia kama herufi za meta na kutafuta maneno \faili au \gile kwenye faili.

Egrep au grep -E ni toleo lingine la grep au Extended grep. Toleo hili la grep ni bora na la haraka linapokuja suala la kutafuta muundo wa kawaida wa kujieleza kwani huchukulia herufi za meta kama zilivyo na haibadilishi kama nyuzi kama kwenye grep, na kwa hivyo umeachiliwa kutoka kwa mzigo wa kuzikimbia kama katika grep. Inatumia ERE au Seti Iliyoongezwa ya Maonyesho ya Kawaida.

Katika kesi ya egrep, hata kama hutaepuka meta-herufi, itawachukulia kama wahusika maalum na kuwabadilisha kwa maana yao maalum badala ya kuwachukulia kama sehemu ya kamba.

$ egrep -C 0 '(f|g)ile' check_file
$ egrep -C 0 '\(f\|g\)ile' check_file

Kama hapa, egrep ilitafuta mfuatano wa \file wakati meta-charact haikuepukika kama ingemaanisha kwa maana ya wahusika hawa. Lakini, wahusika hawa walipotoroka, basi egrep aliwachukulia kama sehemu ya mfuatano na kutafuta mfuatano kamili \(f|g)ile” katika faili.

Fgrep au Fixed grep au grep -F bado ni toleo lingine la grep ambalo hutafuta haraka linapokuja suala la kutafuta mfuatano mzima badala ya kujieleza mara kwa mara kwani halitambui misemo ya kawaida, wala meta-herufi zozote. Kwa kutafuta kamba yoyote ya moja kwa moja, hili ni toleo la grep ambalo linapaswa kuchaguliwa.

Fgrep hutafuta mfuatano kamili na hata haitambui herufi maalum kama sehemu ya usemi wa kawaida hata ikiwa imetoroka au haijatoroka.

$ fgrep -C 0 '(f|g)ile' check_file
$ fgrep -C 0 '\(f\|g\)ile' check_file

Kama vile, wakati herufi za meta hazijatoroka, fgrep ilitafuta mfuatano kamili \(f|g)ile” kwenye faili, na herufi za meta zilipotoroshwa, basi amri ya fgrep ilitafuta. kwa \\(f\|g\)ile herufi zote kama zilivyo kwenye faili.

Tayari tumeshughulikia mifano ya vitendo ya amri ya grep unaweza kuisoma hapa, ikiwa unataka kupata zaidi kutoka kwa amri ya grep katika Linux.

Hitimisho

Zilizoangaziwa hapo juu ni tofauti kati ya 'grep', 'egrep' na 'fgrep'. Kando na tofauti katika seti ya misemo ya kawaida inayotumiwa, na kasi ya utekelezaji, vigezo vya mstari wa amri ya mapumziko hubaki sawa kwa matoleo yote matatu ya grep na hata badala ya \egrep au \fgrep, \grep -E au \grep -F inapendekezwa kutumika.

Ukipata tofauti zozote kati ya matoleo haya matatu ya grep, yataje kwenye maoni yako.