Hva er forskjellen mellom Grep, Egrep og Fgrep i Linux?


Et av de kjente søkeverktøyene på Unix-lignende systemer som kan brukes til å søke etter hva som helst, enten det er en fil, eller en linje eller flere linjer i filen, er grep-verktøyet. Den er veldig omfattende i funksjonalitet som kan tilskrives det store antallet alternativer den støtter som: søk med strengmønster, eller reg-ex-mønster eller perl-basert reg-ex etc.

På grunn av dens varierende funksjonalitet, har den mange varianter, inkludert grep, egrep (Utvidet GREP), fgrep ( >Fikset GREP), pgrep (Prosess GREP), rgrep (Rekursiv GREP) osv. Men disse variantene har mindre forskjeller til originale grep som har gjort dem populære og til å bli brukt av ulike Linux-programmerere til spesifikke oppgaver.

Det viktigste som gjenstår å undersøke er hva som er forskjellene mellom de tre hovedvariantene, dvs. 'grep', 'egrep' og 'fgrep' av grep som får Linux-brukere til å velge den ene eller den andre versjonen i henhold til kravet.

Noen spesielle meta-tegn i grep

  1. + – Tilsvarer en eller flere forekomster av forrige tegn.
  2. ? – Dette angir nesten 1 repetisjon av forrige tegn. Som: a? Vil samsvare med 'a' eller 'aa'.
  3. ( – Start av alterneringsuttrykk.
  4. ) – Slutt på alterneringsuttrykk.
  5. | – Matcher et av uttrykkene atskilt med '|'. Som: “(a|b)cde ” vil matche enten ‘abcde’ eller ‘bbcde’.
  6. { – Dette meta-tegnet indikerer start av områdespesifiserer. Som: “a{2} ” samsvarer med “aa ” i filen, dvs. en 2 ganger.
  7. } – Dette meta-tegnet indikerer spesifikasjonen for slutten av området.

Forskjeller mellom grep, egrep og fgrep

Noen hovedforskjeller mellom grep, egrep og fgrep kan fremheves som følger. For dette settet med eksempler antar vi at filen som operasjonen utføres på er:

Grep kommando

grep eller Global Regular Expression Print er hovedsøkeprogrammet på Unix-lignende systemer som kan søke etter hvilken som helst type streng på en hvilken som helst fil eller liste over filer eller til og med utdata fra alle kommando.

Foreslått lesing: 12 praktiske eksempler på Linux grep-kommando

Den bruker Grunnleggende regulære uttrykk bortsett fra vanlige strenger som søkemønster. I Basic Regular Expressions (BRE), meta-tegn som: '{','}','(',')','|','+','?' mister sin betydning og behandles som vanlige tegn i streng og må escapes hvis de skal behandles som spesialtegn .

Foreslått lesing: 11 avanserte "Grep"-kommandoer på karakterklasser og brakettuttrykk

I tillegg bruker grep Boyer-Moore-algoritmen for raskt å søke i en streng eller regulært uttrykk.

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

Som her, når kommandoen kjøres uten å escape '(' ')' og '|' så søkte den etter hele strengen, dvs. “(f|g) )ile ” i filen. Men når spesialtegnene ble escaped, i stedet for å behandle dem som en del av en streng, behandlet grep dem som metategn og søkte etter ordene “file ” eller “gile ” i filen.

Egrep kommando

Egrep eller grep -E er en annen versjon av grep eller det utvidede grepet. Denne versjonen av grep er effektiv og rask når det gjelder å søke etter et regulært uttrykksmønster, da den behandler metategn som de er og ikke erstatter dem som strenger som i grep, og dermed er du fri fra byrden med å unnslippe dem som i grep. Den bruker ERE eller Extended Regular Expression-settet.

I tilfelle egrep, selv om du ikke unnslipper meta-tegnene, vil det behandle dem som spesialtegn og erstatte dem med deres spesielle betydning i stedet for å behandle dem som en del av strengen.

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

Som her, søkte egrep etter “fil ”-streng når meta-tegnene ikke ble escaped som det ville bety med betydningen av disse tegnene. Men når disse tegnene ble escaped, behandlet egrep dem som en del av strengen og søkte etter fullstendig streng “(f|g)ile ” i filen.

fgrep kommando

Fgrep eller Fixed grep eller grep -F er nok en versjon av grep som er rask i søk når det gjelder å søke etter hele strengen i stedet for regulære uttrykk da den ikke gjenkjenner de regulære uttrykkene, heller ikke noen meta-tegn. For å søke i en hvilken som helst direkte streng, er dette versjonen av grep som skal velges.

Fgrep søker etter fullstendig streng og gjenkjenner ikke engang spesialtegn som en del av regulære uttrykk, selv om de er escapede eller ikke escapede.

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

Som, når meta-tegn ikke ble escaped, søkte fgrep etter den komplette strengen “(f|g)ile ” i filen, og når meta-tegnene ble escaped, så søkte fgrep-kommandoen etter “\(f\|g\)ile ” alle tegn som er i filen.

Vi har allerede dekket noen praktiske eksempler på grep-kommando, du kan lese dem her, hvis du vil få mer ut av grep-kommando i Linux.

Lær 12 praktiske eksempler på Linux grep Command

Konklusjon

Over uthevet er forskjellene mellom ‘grep’, ‘egrep’ og ‘fgrep’. Bortsett fra forskjellen i settet med regulære uttrykk som brukes, og utførelseshastigheten, forblir rest-kommandolinjeparameterne de samme for alle de tre versjonene av grep og til og med i stedet for "egrep" eller "fgrep", "grep -E" eller "grep - F ” anbefales brukt.

Hvis du finner andre forskjeller mellom disse tre versjonene av grep, nevne dem i kommentarene dine.