Věřím, že již znáte příkaz grep. Může se stát, že se můžete setkat s výrazy jako egrep
a fgrep
v nějaké diskuzi na internetovém fóru a zajímalo by mě, co jsou tyto příkazy a zda souvisí s grep.
V tomto tutoriálu proberu tyto varianty grep a vysvětlím rozdíl a podobnosti.
Co je egrep a fgrep? Jaký je rozdíl mezi grep, egrep a fgrep?
e
v egrep znamená prodloužený a f
ve fgrep znamená pevné. egrep umožňuje použití rozšířeného regulárního výrazu a fgrep nepovoluje regulární výraz vůbec.
To vše bude brzy dávat větší smysl, když je vysvětlím na příkladech.
Víte, že grep funguje na regulárním výrazu. Ale to není úplná pravda.
Ve výchozím nastavení pracuje příkaz grep na základním regulárním výrazu. Pokud chcete složitější vyhledávání, musíte použít rozšířený regulární výraz. Podívejte se na rozdíl mezi základním a rozšířeným regulárním výrazem.
Příkaz egrep umožňuje použití rozšířeného regulárního výrazu.
Příkaz fgrep na druhé straně funguje na pevném řetězci namísto regulárního výrazu. To znamená, že používá vyhledávací vzor tak, jak je pro vyhledávání, a je tedy rychlejší než grep.
I když stále můžete vidět egrep
a fgrep
ve volné přírodě je jejich status zastaralý. Mnoho systémů stále obsahuje binární soubory pro tyto varianty.
Nyní je však standardem POSIX používat standardní grep se speciálními příznaky voleb (-E
nebo -F
). Tyto příznaky pomáhají standardnímu grepu emulovat funkčnost každého příslušného příkazu.
Abych to shrnul:
egrep
afgrep
jsou zastaralé příkazy a měli byste se jim vyhnout.egrep
je ekvivalentnígrep -E
a umožňuje použití rozšířeného regulárního výrazu.fgrep
je ekvivalentnígrep -F
a používá pevný řetězec pro vyhledávání, a proto provádí rychlejší vyhledávání.
Pochopení rozdílu mezi grep, egrep a fgrep s příkladem
Vytvořil jsem krátký textový soubor, který demonstruje rozdíly mezi těmito variantami grep.
[email protected]:~$ cat test.txt
this is a tasty test
Standardní příkaz grep
Toto je standardní verze grep určená pro vyhledávání vzorů pomocí základních regulárních výrazů. Použití grep vyžaduje escapování metaznaků ke generování očekávaného chování.
Předpokládejme, že chci hledat buď tast
nebo test
. To je to, co mohu použít:
[email protected]:~$ grep 't\(a\|e\)st' test.txt
Všimněte si, jak musíte uniknout závorce? S rozšířeným regulárním výrazem je to mnohem snazší prohlížet a pochopit.
Rozšířený Grep:Egrep nebo grep -E
Egrep byl vytvořen, aby poskytoval extended podpora metaznaků. To znamená, že tyto speciální znaky ve výchozím nastavení escapuje. To šetří čas a obecně usnadňuje čtení výrazů.
Příkaz, který jsem použil výše, lze přepsat jako mnohem čitelnější:
[email protected]:~$ egrep 't(a|e)st' test.txt
Binární soubor egrep konzistentně nepodporuje {
charakter. To může mít za následek neočekávané chování.
Některé verze egrep umožňují jejich správnou interpretaci jako doslovné znaky, pokud jsou zakódovány (\{
). Nicméně, nejlepší postup pro shodu doslovného {
je uzavřít do hranatých závorek [{]
.
Opravený Grep:Fgrep nebo grep -F
Softwaroví profesionálové vědí, že i když se výrazně zvýšila výpočetní kapacita, optimalizaci nelze nikdy ignorovat. Grep je velmi mocný nástroj, ale někdy může zbytečně využívat systémové prostředky.
Odtud pochází myšlenka fixního grepu. Tento software je ideální pro případy použití, kdy potřebujete najít přesný řetězec.
Neobsahuje výkonné výrazové nástroje jiných variant grep. Ta slabost je ve skutečnosti supersíla. Díky tomu je nástroj mnohem rychlejší.
Jak jsem již zmínil dříve, měli byste se vyhnout používání egrep a fgrep, protože jsou zastaralé příkazy. Pomocí grep -E
a grep -F
je cesta vpřed.
Doufám, že nyní lépe rozumíte grep, egrep a fgrep. Pokud chcete něco přidat, neváhejte napsat komentář.