Hvad er forskellen mellem Grep, Egrep og Fgrep i Linux?


Et af det berømte søgeværktøj på Unix-lignende systemer, der kan bruges til at søge efter hvad som helst, hvad enten det er en fil eller en linje eller flere linjer i filen er grep-værktøjet. Det er meget stort i funktionalitet, der kan tilskrives det store antal muligheder, det understøtter som: søgning ved hjælp af strengemønster eller reg-ex-mønster eller perl-baseret reg-ex osv.

På grund af dets forskellige funktionaliteter har den mange varianter, herunder grep, egrep (Extended GREP), fgrep (Fixed GREP), pgrep (Process GREP), rgrep (Recursive GREP) osv. Men disse varianter har mindre forskelle i forhold til original grep, hvilket har gjort dem populær og skal bruges af forskellige Linux-programmører til specifikke opgaver.

Det vigtigste, der stadig skal undersøges, er, hvad er forskellene mellem de tre hovedvarianter, dvs. 'grep', 'egrep' og 'fgrep' af grep, der får Linux-brugere til at vælge den ene eller den anden version efter krav.

Nogle specielle metategn af grep

  1. + - Svarer til en eller flere forekomster af tidligere tegn.
  2. ? - Dette angiver næsten 1 gentagelse af forrige tegn. Ligesom: a? Vil matche 'a' eller 'aa'.
  3. ( - Start af alternativt udtryk.
  4. ) - Slut på alternationsudtryk.
  5. | - Matcher et af udtrykkene adskilt af | . Ligesom: "(a | b) cde" svarer til enten 'abcde' eller 'bbcde'.
  6. { - Dette metategn angiver start af rækkevidde. Ligesom: "a {2}" matcher "aa" i filen, dvs. en 2 gange.
  7. } - Dette metategn angiver slutningen af områdespecifikatoren.

Forskelle mellem grep, egrep og fgrep

Nogle hovedforskelle mellem grep, egrep og fgrep kan fremhæves som følger. For dette sæt eksempler antager vi, at den fil, som operationen udføres på, skal være:

grep eller Global Regular Expression Print er det største søgeprogram på Unix-lignende systemer, som kan søge efter enhver type streng på en fil eller liste over filer eller endda output af en hvilken som helst kommando.

Det bruger Basic Regular Expressions bortset fra normale strenge som et søgemønster. I Basic Regular Expressions (BRE), metategn som: {,} , (,) , | , + , ?

Grep bruger også Boyer-Moore-algoritme til hurtig søgning i en hvilken som helst streng eller et regulært udtryk.

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

Som her, når kommandoen køres uden at undslippe () og | så søgte den efter den komplette streng, dvs. “(f | g) ile” i filen. Men da specialtegnene blev undsluppet, behandlede grep dem i stedet for at behandle dem som en del af en streng, som metategn og søgte efter ord “fil” eller “gile” i filen.

Egrep eller grep -E er en anden version af grep eller Extended grep. Denne version af grep er effektiv og hurtig, når det kommer til at søge efter et regulært udtryksmønster, da det behandler metategn som det er og ikke erstatter dem som strenge som i grep, og derfor er du befriet for byrden ved at undslippe dem som i grep. Den bruger ERE eller det udvidede sæt regulært udtryk.

I tilfælde af egrep, selvom du ikke undslipper metategnene, vil det behandle dem som specialtegn og erstatte dem med deres specielle betydning i stedet for at behandle dem som en del af en streng.

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

Som her søgte egrep efter "fil" streng, når metakarakterne ikke blev undsluppet, da det ville betyde betydningen af disse tegn. Men da disse tegn blev undsluppet, behandlede egrep dem som en del af streng og søgte efter komplet streng “(f | g) ile” i filen.

Fgrep eller den faste grep eller grep -F er endnu en version af grep, som er hurtig i søgning, når det kommer til at søge efter hele strengen i stedet for regulært udtryk, da den ikke genkender de regulære udtryk, hverken nogen metategn. Til søgning i en hvilken som helst direkte streng er dette den version af grep, der skal vælges.

Fgrep søger efter komplet streng og genkender ikke engang specialtegn som en del af regulært udtryk, selvom de er undsluppet eller ikke er undsluppet.

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

Som når metategn ikke blev undsluppet, søgte fgrep efter den komplette streng “(f | g) ile” i filen, og da metategnene blev undsluppet, søgte kommandoen fgrep efter “\ (f\| g \) ile” alle tegn som i filen.

Vi har allerede dækket nogle praktiske eksempler på grep-kommando, du kan læse dem her, hvis du vil få mere ud af grep-kommandoen i Linux.

Konklusion

Ovenfor fremhævet er forskellene mellem 'grep', 'egrep' og 'fgrep'. Bortset fra forskellen i det anvendte sæt regulære udtryk og udførelseshastigheden forbliver restkommandolinjeparametre de samme for alle de tre versioner af grep og endda i stedet for "egrep" eller "fgrep", "grep -E" eller "grep - F ”anbefales at bruge.

Hvis du finder andre forskelle mellem disse tre versioner af grep, skal du nævne dem i dine kommentarer.