Ricerca nel sito web

Qual è la differenza tra Grep, Egrep e Fgrep in Linux?


Uno dei rinomati strumenti di ricerca su sistemi simili a Unix che può essere utilizzato per cercare qualsiasi cosa, sia che si tratti di un file, di una riga o di più righe nel file, è l'utilità grep. È molto vasto in termini di funzionalità che può essere attribuito al gran numero di opzioni che supporta come: ricerca utilizzando pattern di stringhe, pattern reg-ex o reg-ex basati su perl ecc.

A causa delle sue diverse funzionalità, ha molte varianti tra cui grep, egrep (Extended GREP), fgrep (GREP fisso), pgrep (GREP di processo), rgrep (GREP ricorsivo) ecc. Ma queste varianti presentano piccole differenze rispetto al grep originale che le ha rese popolari e utilizzabili da vari programmatori Linux per compiti specifici.

La cosa principale che resta da indagare è quali sono le differenze tra le tre varianti principali, ovvero 'grep', 'egrep' e 'fgrep' di grep che fa sì che gli utenti Linux scelgano l'una o l'altra versione secondo i requisiti.

Alcuni meta-caratteri speciali di grep

  1. + – Equivalente a una o più occorrenze del carattere precedente.
  2. ? – Indica quasi 1 ripetizione del carattere precedente. Ad esempio: a? Corrisponderebbe a 'a' o 'aa'.
  3. ( – Inizio dell'espressione di alternanza.
  4. ) – Fine dell'espressione di alternanza.
  5. | – Corrisponde a una delle espressioni separate da '|'. Ad esempio: “(a|b)cde ” corrisponderebbe a 'abcde' o 'bbcde'.
  6. { – Questo metacarattere indica l'inizio dell'identificatore dell'intervallo. Ad esempio: “a{2} ” corrisponde a “aa ” nel file, ovvero a 2 volte.
  7. } – Questo metacarattere indica l'identificatore di fine intervallo.

Differenze tra grep, egrep e fgrep

Alcune differenze principali tra grep, egrep e fgrep possono essere evidenziate come segue. Per questa serie di esempi presupponiamo che il file su cui viene eseguita l'operazione sia:

Comando Grep

grep o Global Regular Expression Print è il principale programma di ricerca sui sistemi simili a Unix che può cercare qualsiasi tipo di stringa su qualsiasi file o elenco di file o anche l'output di qualsiasi comando.

Lettura consigliata: 12 esempi pratici del comando grep di Linux

Utilizza le espressioni regolari di base oltre alle normali stringhe come modello di ricerca. Nelle espressioni regolari di base (BRE), metacaratteri come: '{','}','(',')','|','+','?' perdono il loro significato e vengono trattati come normali caratteri di stringa e devono essere sottoposti a escape se devono essere trattati come caratteri speciali .

Lettura consigliata: 11 comandi avanzati "Grep" su classi di caratteri ed espressioni tra parentesi

Inoltre, grep utilizza l'algoritmo Boyer-Moore per la ricerca rapida di qualsiasi stringa o espressione regolare.

grep -C 0 '(f|g)ile' check_file
grep -C 0 '\(f\|g\)ile' check_file

Come qui, quando il comando viene eseguito senza eseguire l'escape '(' ')' e '|', viene cercata la stringa completa, ovvero “(f|g )ile " nel file. Ma quando veniva eseguito l'escape dei caratteri speciali, invece di trattarli come parte di una stringa, grep li trattava come metacaratteri e cercava le parole “file ” o “gile ” nel fascicolo.

Comando Egrep

Egrep o grep -E è un'altra versione di grep o Extended grep. Questa versione di grep è efficiente e veloce quando si tratta di cercare un modello di espressione regolare poiché tratta i metacaratteri così come sono e non li sostituisce come stringhe come in grep, e quindi sei libero dal peso di scapparli come in grep. Utilizza ERE o il set di espressioni regolari estese.

Nel caso di egrep, anche se non si evitano i metacaratteri, li tratterà come caratteri speciali e li sostituirà con il loro significato speciale invece di trattarli come parte di una stringa.

egrep -C 0 '(f|g)ile' check_file
egrep -C 0 '\(f\|g\)ile' check_file

Come in questo caso, egrep ha cercato la stringa “file ” quando i metacaratteri non erano sottoposti a escape, come significherebbe il significato di questi caratteri. Ma, quando questi caratteri venivano sottoposti a escape, egrep li trattava come parte di una stringa e cercava la stringa completa “(f|g)ile ” nel file.

Comando fgrep

Fgrep o Fixed grep o grep -F è ancora un'altra versione di grep che è veloce nella ricerca quando si tratta di cercare l'intera stringa invece delle espressioni regolari in quanto non riconosce le espressioni regolari, né alcun metacarattere. Per cercare qualsiasi stringa diretta, questa è la versione di grep che deve essere selezionata.

Fgrep cerca la stringa completa e non riconosce nemmeno i caratteri speciali come parte dell'espressione regolare, anche se con o senza escape.

fgrep -C 0 '(f|g)ile' check_file
fgrep -C 0 '\(f\|g\)ile' check_file

Ad esempio, quando non veniva eseguito l'escape dei metacaratteri, fgrep cercava la stringa completa “(f|g)ile ” nel file e quando veniva eseguito l'escape dei metacaratteri, il comando fgrep cercava “\(f\|g\)ile ” tutti i caratteri così come sono nel file.

Abbiamo già trattato alcuni esempi pratici di comando grep, puoi leggerli qui, se vuoi ottenere di più dal comando grep in Linux.

Impara 12 esempi pratici del comando grep di Linux

Conclusione

Sopra sono evidenziate le differenze tra 'grep', 'egrep' e 'fgrep'. A parte la differenza nell'insieme di espressioni regolari utilizzate e nella velocità di esecuzione, i parametri della riga di comando rest rimangono gli stessi per tutte e tre le versioni di grep e anche al posto di “egrep” o “fgrep”, “grep -E” o “grep - F” si consiglia di utilizzare.

Se trovi altre differenze tra queste tre versioni di grep, menzionale nei tuoi commenti.