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
afgrep
sú zastarané príkazy a mali by ste sa im vyhnúť.egrep
je ekvivalentom príkazugrep -E
a umožňuje použitie rozšíreného regulárneho výrazu.fgrep
je ekvivalentom príkazugrep -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.