GNU/Linux >> Linux Esercitazione >  >> Linux

Spiegato! La differenza tra i comandi grep, egrep e fgrep

Credo che tu abbia già familiarità con il comando grep. Può capitare di imbattersi in termini come egrep e fgrep in alcune discussioni in un forum su Internet e mi chiedo quali sono questi comandi e se sono correlati a grep.

In questo tutorial parlerò di queste varianti di grep spiegando le differenze e le somiglianze.

Cos'è egrep e fgrep? Qual è la differenza tra grep, egrep e fgrep?

Il e in egrep sta per esteso e f in fgrep sta per fisso. egrep consente l'uso di espressioni regolari estese e fgrep non consente affatto le espressioni regolari.

Tutto questo avrà più senso presto quando li spiegherò con esempi.

Sai che grep funziona su regex. Ma non è tutta la verità.

Per impostazione predefinita, il comando grep funziona su espressioni regolari di base. Se si desidera una ricerca più complessa, è necessario utilizzare un'espressione regolare estesa. Vedi la differenza tra regex di base ed estesa.

Il comando egrep consente l'uso di espressioni regolari estese.

Il comando fgrep d'altra parte funziona su una stringa fissa anziché su una regex. Ciò significa che prende il modello di ricerca come è per la ricerca e quindi è più veloce di grep.

Tuttavia, potresti ancora vedere egrep e fgrep in natura, il loro stato è deprecato. Molti sistemi includono ancora i binari per queste varianti.

Tuttavia, ora è lo standard POSIX utilizzare grep standard con flag di opzioni speciali (-E o -F ). Questi flag aiutano grep standard a emulare la funzionalità di ogni rispettivo comando.

Per riassumere:

  • egrep e fgrep sono comandi deprecati e dovrebbero essere evitati.
  • egrep è equivalente a grep -E comando e consente l'uso di espressioni regolari estese.
  • fgrep è equivalente a grep -F comando e utilizza una stringa fissa per la ricerca e quindi esegue una ricerca più veloce.

Capire la differenza tra grep, egrep e fgrep con esempio

Ho creato un breve file di testo per dimostrare le differenze tra queste varianti di grep.

[email protected]:~$ cat test.txt 
this is a tasty test

Comando grep standard

Questa è la versione standard di grep progettata per la ricerca di modelli utilizzando espressioni regolari di base. L'uso di grep richiede l'escape dei metacaratteri per generare il comportamento previsto.

Supponiamo che io voglia cercare tast o test . Questo è quello che posso usare:

[email protected]:~$ grep 't\(a\|e\)st' test.txt

Hai notato come devi sfuggire alla parentesi? Questo è molto più facile da guardare e capire con l'espressione regolare estesa.

Grep esteso:Egrep o grep -E

Egrep è stato creato per fornire esteso supporto per i meta-caratteri. Ciò significa che esegue l'escape di questi caratteri speciali per impostazione predefinita. Ciò consente di risparmiare tempo e in genere rende le espressioni più facili da leggere.

Il comando che ho usato sopra può essere riscritto come molto più leggibile:

[email protected]:~$ egrep 't(a|e)st' test.txt

Il binario egrep non supporta costantemente il { carattere. Ciò può causare comportamenti imprevisti.

Alcune versioni di egrep consentono di interpretarli correttamente come caratteri letterali in caso di escape (\{ ). Tuttavia, la best practice per la corrispondenza di un { letterale è racchiudere tra parentesi quadre [{] .

Risolto il problema con Grep:Fgrep o grep -F

I professionisti del software sanno che anche se la capacità di calcolo è notevolmente aumentata, l'ottimizzazione non può mai essere ignorata. Grep è uno strumento molto potente, ma a volte può utilizzare le risorse di sistema inutilmente.

È da qui che è nata l'idea di fixed grep. Questo software è ideale per i casi d'uso in cui è necessario abbinare una stringa esatta.

Non presenta i potenti strumenti di espressione delle altre varianti di grep. Quella debolezza è in realtà il suo super potere. Questo rende lo strumento molto più veloce.

Come accennato in precedenza, dovresti evitare di usare egrep e fgrep perché sono comandi deprecati. Usando grep -E e grep -F è la via da seguire.

Spero che ora tu abbia una migliore comprensione di grep, egrep e fgrep. Se hai qualcosa da aggiungere, non esitare a lasciare un commento.


Linux
  1. Qual è la differenza tra InnoDB e MyISAM?

  2. Qual è la differenza tra Sudo Su – e Sudo Su –?

  3. La differenza tra Getty e Agety?

  4. La differenza tra .exrc e .vimrc?

  5. La differenza tra '$ . Foo' E '$ ./foo'??

La differenza tra sudo e su spiegata

Qual è la differenza tra Linux e Unix?

La differenza tra più, meno e la maggior parte dei comandi

Differenza tra apt e apt-get spiegato

Qual è la differenza tra i comandi kill e killall?

Qual è la differenza tra unlink e rm?