GNU/Linux >> Znalost Linux >  >> Linux

Vysvětleno! Rozdíl mezi příkazy grep, egrep a fgrep

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 a fgrep 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ář.


Linux
  1. Jaký je rozdíl mezi Sudo Su – a Sudo Su –?

  2. Rozdíl mezi Getty a Agetty?

  3. Rozdíl mezi .exrc a .vimrc?

  1. Jaký je rozdíl mezi InnoDB a MyISAM?

  2. Rozdíl mezi „$ . Foo“ A „$ ./foo“??

  3. Rozdíl mezi Nss a Pam?

  1. Rozdíl mezi příkazy zastavení a vypnutí?

  2. Jaký je rozdíl mezi ls a l?

  3. Rozdíl mezi příkazy 'ifconfig' a ​​'ip'