grep vs egrep vs fgrep: Aký je rozdiel?


grep, egrep, fgrep. Všetky znejú podobne. Takže, aký je rozdiel?

Verím, že už poznáte príkaz grep. Môže sa stať, že v niektorej diskusii na internetovom fóre narazíte na výrazy ako egrep a fgrep a budete sa diviť, čo sú tieto príkazy a či súvisia s grep.

V tomto návode budem diskutovať o týchto variantoch grep vysvetľujúcich rozdiel a podobnosti.

Čo je egrep a fgrep? Aký je rozdiel medzi grep, egrep a fgrep?

e v egrep znamená rozšírené a f v fgrep znamená pevné. egrep umožňuje použitie rozšíreného regulárneho výrazu a fgrep nepovoľuje regulárny výraz vôbec.

Toto všetko bude mať čoskoro väčší zmysel, keď ich vysvetlím na príkladoch.

Viete, že grep funguje na regulárny výraz. Ale to nie je úplná pravda.

Príkaz grep štandardne funguje na základnom regulárnom výraze. Ak chcete komplexnejšie vyhľadávanie, musíte použiť rozšírený regulárny výraz. Pozrite si rozdiel medzi základným a rozšíreným regulárnym výrazom.

Príkaz egrep umožňuje použitie rozšíreného regulárneho výrazu.

Príkaz fgrep na druhej strane funguje na pevnom reťazci namiesto regulárneho výrazu. To znamená, že používa vyhľadávací vzor taký, aký je pre vyhľadávanie, a teda je rýchlejší ako grep.

Hoci vo voľnej prírode stále môžete vidieť egrep a fgrep, ich stav je zastaraný. Mnoho systémov stále obsahuje binárne súbory pre tieto varianty.

Teraz je však štandardom POSIX používať štandardný grep so špeciálnymi príznakmi voľby (-E alebo -F). Tieto príznaky pomáhajú štandardnému grepu emulovať funkčnosť každého príslušného príkazu.

Zhrnúť:

  • egrep a fgrep sú zastarané príkazy a mali by ste sa im vyhnúť.

  • egrep je ekvivalentom príkazu grep -E a umožňuje použitie rozšíreného regulárneho výrazu.

  • fgrep je ekvivalentom príkazu grep -F a používa pevný reťazec na vyhľadávanie, a preto vykonáva rýchlejšie vyhľadávanie.

Pochopenie rozdielu medzi grep, egrep a fgrep na príklade

Vytvoril som krátky textový súbor na demonštráciu rozdielov medzi týmito variantmi grep.

christopher@linux-handbook:~$ cat test.txt 
this is a tasty test

Štandardný príkaz grep

Toto je štandardná verzia grep určená na vyhľadávanie vzorov pomocou základných regulárnych výrazov. Použitie grep vyžaduje únikové metaznaky na vygenerovanie očakávaného správania.

Predpokladajme, že chcem hľadať buď tast alebo test. Toto môžem použiť:

christopher@linux-handbook:~$ grep 't\(a\|e\)st' test.txt

Všimnite si, ako musíte uniknúť zátvorke? S rozšíreným regulárnym výrazom je to oveľa jednoduchšie pozrieť sa a pochopiť.

Extended Grep: Egrep alebo grep -E

Egrep bol vytvorený s cieľom poskytnúť rozšírenú podporu pre metaznaky. To znamená, že v predvolenom nastavení unikne týmto špeciálnym znakom. To šetrí čas a vo všeobecnosti uľahčuje čítanie výrazov.

Príkaz, ktorý som použil vyššie, je možné prepísať ako oveľa čitateľnejší:

christopher@linux-handbook:~$ egrep 't(a|e)st' test.txt

Binárny súbor egrep konzistentne nepodporuje znak {. To môže viesť k neočakávanému správaniu.

Niektoré verzie egrep umožňujú ich správnu interpretáciu ako doslovné znaky, ak sú zakódované (\{). Najlepšou praxou pri porovnávaní doslovného { je však uzavrieť do hranatých zátvoriek [{].

Opravené Grep: Fgrep alebo grep -F

Softvéroví profesionáli vedia, že aj keď sa výpočtové schopnosti výrazne zvýšili, optimalizáciu nemožno nikdy ignorovať. Grep je veľmi silný nástroj, ktorý však môže niekedy zbytočne využívať systémové prostriedky.

Odtiaľ pochádza myšlienka fixného grepu. Tento softvér je ideálny pre prípady použitia, keď potrebujete zhodovať presný reťazec.

Neobsahuje výkonné výrazové nástroje iných variantov grep. Tou slabosťou je vlastne super sila. Vďaka tomu je nástroj oveľa rýchlejší.

Ako som už spomenul, mali by ste sa vyhnúť používaniu egrep a fgrep, pretože sú to zastarané príkazy. Použitie grep -E a grep -F je cesta vpred.

Dúfam, že teraz lepšie rozumiete grep, egrep a fgrep. Ak máte čo pridať, pokojne napíšte komentár.