Mitä eroa Grepin, Egrepin ja Fgrepin välillä on Linuxissa?


Yksi Unix-tyyppisten järjestelmien tunnetuista hakutyökaluista, jolla voidaan etsiä mitä tahansa, oli se sitten tiedosto, rivi tai useita rivejä tiedostossa, on grep-apuohjelma. Se on toiminnaltaan erittäin laaja, mikä johtuu sen tukemista vaihtoehdoista, kuten: haku merkkijonomallilla tai reg-ex-kuvio tai perl-pohjainen reg-ex jne.

Erilaisten toimintojensa vuoksi siitä on monia muunnelmia, kuten grep, egrep (Laajennettu GREP), fgrep ( >Korjattu GREP), pgrep (Prosessoi GREP), rgrep (Rekursiivinen GREP) jne. Mutta näillä muunnelmilla on pieniä eroja alkuperäiseen grepiin, mikä on tehnyt niistä suositut ja useat Linux-ohjelmoijat käyttävät niitä tiettyihin tehtäviin.

Tärkein asia, joka on vielä tutkimatta, on erot kolmen päämuunnelman, eli 'grep', 'egrep' ja 'fgrep' välillä. grep, joka saa Linux-käyttäjät valitsemaan yhden tai toisen version vaatimusten mukaan.

Jotkut grepin erikoismetamerkit

  1. + – Vastaa yhtä tai useampaa edellisen merkin esiintymää.
  2. ? – Tämä tarkoittaa melkein yhtä edellisen merkin toistoa. Kuten: a? Vastaa 'a' tai 'aa'.
  3. ( – vuorottelulausekkeen alku.
  4. ) – Vaihtoehtolausekkeen loppu.
  5. | – Vastaa jompaakumpaa lauseketta erotettuna '|'. Kuten: "(a|b)cde" vastaa joko 'abcde' tai 'bbcde'.
  6. { – Tämä meta-merkki ilmaisee alueen määritteen alun. Kuten: "a{2} " vastaa "aa " tiedostossa eli a 2 kertaa.
  7. } – Tämä meta-merkki ilmaisee alueen lopun määritteen.

Erot grepin, egrepin ja fgrepin välillä

Joitakin tärkeimpiä eroja grepin, egrep ja fgrep välillä voidaan korostaa seuraavasti. Tässä esimerkkijoukossa oletamme, että tiedosto, jolle toiminto suoritetaan, on:

Grep-komento

grep tai Global Regular Expression Print on päähakuohjelma Unix-tyyppisissä järjestelmissä, joka voi etsiä mitä tahansa merkkijonoa mistä tahansa tiedostosta tai tiedostoluettelosta tai jopa tulosta mistä tahansa komento.

Suositeltu luku: 12 käytännön esimerkkiä Linuxin grep-komennosta

Se käyttää hakumallina säännöllisiä peruslausekkeita tavallisten merkkijonojen lisäksi. Perussäännöllisissä lausekkeissa (BRE) meta-merkit, kuten: '{','}','(',')','|','+', '?' menettävät merkityksensä ja niitä käsitellään merkkijonon normaaleina merkeinä, ja ne on poistettava, jos niitä halutaan käsitellä erikoismerkeinä .

Suositeltu luku: 11 'Grep'-komentoa eteenpäin merkkiluokissa ja hakasulkeissa

Lisäksi grep käyttää Boyer-Mooren algoritmia minkä tahansa merkkijonon tai säännöllisen lausekkeen nopeaan etsimiseen.

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

Kuten tässä, kun komento suoritetaan ilman merkkiä '(' )' ja '|', se etsi koko merkkijonoa, eli "(f|g )ile ” tiedostossa. Mutta kun erikoismerkit oli pakotettu, sen sijaan, että grep olisi käsitellyt niitä osana merkkijonoa, se käsitteli niitä metamerkkeinä ja etsi sanoja "file" tai "gile" tiedostossa.

Egrepin komento

Egrep tai grep -E on toinen versio grepistä tai laajennetusta grepistä. Tämä grep-versio on tehokas ja nopea säännöllisen lausekkeen mallin etsimisessä, koska se käsittelee metamerkkejä sellaisenaan eikä korvaa niitä merkkijonoina kuten grepissä, joten olet vapautettu taakasta paeta niitä. in grep. Se käyttää ERE:tä tai Extended Regular Expression -joukkoa.

Egrepin tapauksessa, vaikka et jättäisikään metamerkkejä, se käsittelee niitä erikoismerkeinä ja korvaisi ne niiden erityisellä merkityksellä sen sijaan, että käsittelisi niitä osana merkkijonoa.

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

Kuten tässä, egrep haki "file "-merkkijonoa, kun meta-merkkejä ei ollut koodinvaihtomerkkiä, kuten se tarkoittaisi näiden merkkien merkityksellä. Mutta kun nämä merkit oli pakotettu, egrep käsitteli ne osana merkkijonoa ja etsi tiedostosta täydellistä merkkijonoa "(f|g)ile ".

fgrep-komento

Fgrep tai Kiinteä grep tai grep -F on jälleen yksi versio grepistä, joka on nopea etsiessään koko merkkijonoa. säännöllisen lausekkeen sijaan, koska se ei tunnista säännöllisiä lausekkeita eikä meta-merkkejä. Mitä tahansa suoraa merkkijonoa etsittäessä, tämä on grep-versio, joka tulee valita.

Fgrep etsii täydellistä merkkijonoa eikä edes tunnista erikoismerkkejä osana säännöllistä lauseketta, vaikka se olisi pakotettu tai ei.

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

Esimerkiksi kun metamerkkejä ei käytetty, fgrep etsi tiedostosta täydellistä merkkijonoa "(f|g)ile ", ja kun metamerkit oli pakotettu, fgrep-komento etsi "\(f\|g\)ile " kaikki merkit sellaisina kuin ne ovat tiedostossa.

Olemme jo käsitelleet käytännön esimerkkejä grep-komennoista, voit lukea ne täältä, jos haluat saada enemmän irti grep-komennosta Linuxissa.

Opi 12 käytännön esimerkkiä Linuxin grep-komennosta

Johtopäätös

Yllä on korostettuna erot 'grep', 'egrep' ja 'fgrep' välillä. Lukuun ottamatta eroja käytettyjen säännöllisten lausekkeiden joukossa ja suoritusnopeudessa, loput komentorivin parametrit pysyvät samoina kaikille kolmelle grep-versiolle ja jopa "egrep" tai "fgrep", "grep -E" tai "grep -" sijaan. F” on suositeltavaa käyttää.

Jos löydät muita eroja näiden kolmen grep-version välillä, mainitse ne kommenteissasi.