Mis vahe on Linuxi Grepi, Egrepi ja Fgrepi vahel?


Üks Unixi-laadsete süsteemide tuntud otsitööriist, mida saab kasutada ükskõik millise otsimiseks, olgu see siis fail, rida või mitu rida failis, on grep-utiliit. See on väga funktsionaalne, mida saab seostada paljude toetatavate võimalustega, näiteks otsimisega stringimustri või reg-ex-mustri või perl-põhise reg-ex abil.

Erinevate funktsioonide tõttu on sellel palju variante, sealhulgas grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) jne populaarne ja seda peavad erinevad Linuxi programmeerijad konkreetsete ülesannete jaoks kasutama.

Peamine asi, mida tuleb veel uurida, on see, millised on erinevused kolme peamise variandi, st grep 'grep', 'egrep' ja 'fgrep' vahel, mis sunnib Linuxi kasutajaid vastavalt nõudele valima ühe või teise versiooni.

Mõned spetsiaalsed grepi metakarakterid

  1. + - samaväärne ühe või mitme eelmise märgi esinemisega.
  2. ? - see tähistab peaaegu ühte eelmise märgi kordust. Nagu: a? sobiks tähtedega a või aa.
  3. ( - vahelduva avaldise algus.
  4. ) - vahelduva avaldise lõpp.
  5. | - sobib mõlemale avaldisega, mis on eraldatud | -ga. Nagu: \"(a | b) cde" vastaks kas 'abcde' või 'bbcde'.
  6. { - see metamärk tähistab vahemiku täpsustaja algust. Nagu: \"a {2}" vastab failis olevale "aa" -le, st 2 korda.
  7. } - see metamärk tähistab vahemiku lõpu täpsustajat.

Grep, egrep ja fgrep erinevused

Mõningaid peamisi erinevusi grep, egrep ja fgrep vahel saab esile tuua järgmiselt. Selle näite komplekti jaoks eeldame, et fail, millega toimingut tehakse, on järgmine:

grep või Global Regular Expression Print on Unixi-laadsete süsteemide peamine otsinguprogramm, mis võib otsida mis tahes tüüpi stringi mis tahes failist või faililoendist või isegi mis tahes käsu väljundist.

Otsingu mustrina kasutab see tavalisi stringe lisaks tavalisi väljendeid. Põhireeglite väljendites (BRE) sisaldavad sellised metamärgid nagu: {,} , (,) , | , + , ? kaotavad oma tähenduse ja neid käsitletakse stringi tavaliste märkidena ning neist tuleb erimärkidena suhtuda.

Samuti kasutab grep Boyer-Moore'i algoritmi mis tahes stringi või regulaaravaldise kiireks otsimiseks.

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

Nagu siin, otsides käsku () ja | , käsku käivitades otsiti tervet stringi, st \"(f | g) ile" failis. Kuid kui erimärgid olid põgenenud, käsitles grep neid stringi osana käsitlemise asemel metamärkidena ja otsis sõnu \"file" või \"gile" failis.

Egrep või grep -E on grepi või laiendatud grepi teine versioon. See grepi versioon on regulaaravaldise mustri otsimisel tõhus ja kiire, kuna see kohtleb metakirjendeid sellisena, nagu see on, ega asenda neid stringidena nagu grepis, ja seega olete vabanenud nende põgenemise koormast kui sisse grep. See kasutab ERE-d või laiendatud regulaaravaldiste komplekti.

EGREPi korral käsitleb see neid isegi erimärkidena ja asendab nende erilise tähenduse, isegi kui te metamärkidest ei pääse.

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

Nagu siin, otsis egrep stringit \"file" siis, kui metamärgid ei pääsenud, nagu see tähendaks nende märkide tähendust. Kuid kui need märgid olid põgenenud, käsitles egrep neid kui stringi osa ja otsis failist täielikku stringi \"(f | g) ile” .

Fgrep või fikseeritud grep või grep -F on veel üks grepi versioon, mis on regulaaravaldise asemel kogu stringi otsimisel kiire otsimisega, kuna see ei tunne ära regulaaravaldisi ega ühtegi metamärki. Otsese stringi otsimiseks peaks see olema valitud grep-i versioon.

Fgrep otsib täielikku stringi ja isegi ei tunne erimärke regulaaravaldise osana, isegi kui see on pääsenud või mitte.

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

Sarnaselt otsis fgrep, kui metamärgid ei pääsenud, failist kogu string \"(f | g) ile" ja kui metamärgid olid põgenenud, otsis käsk fgrep \"\ (f\| g \) iile” jaoks kõik märgid, nagu failis on.

Oleme juba käsitlenud mõningaid praktilisi näiteid grep-käskudest, mida saate lugeda siit, kui soovite Linuxi grep-käsust rohkem kasu saada.

Järeldus

Eespool on välja toodud erinevused ‘grep’, ‘egrep’ ja ‘fgrep’ vahel. Välja arvatud erinevus tavaliste avaldiste hulga erinevuses ja täitmise kiiruses, jäävad ülejäänud käsurea parameetrid samaks ka kõigi kolme grepi versiooni puhul ja isegi\"egrep" või\"fgrep",\"grep -E" või Soovitatav on kasutada\"grep -F".

Kui leiate nende kolme grep-versiooni vahel muid erinevusi, mainige neid oma kommentaarides.