Recherche de site Web

Quelle est la différence entre Grep, Egrep et Fgrep sous Linux ?


L'utilitaire grep est l'un des outils de recherche renommés sur les systèmes de type Unix qui peut être utilisé pour rechercher n'importe quoi, qu'il s'agisse d'un fichier, d'une ou de plusieurs lignes dans un fichier. Ses fonctionnalités sont très vastes, ce qui peut être attribué au grand nombre d'options qu'il prend en charge, telles que : la recherche à l'aide d'un modèle de chaîne, d'un modèle reg-ex ou d'un reg-ex basé sur Perl, etc.

En raison de ses différentes fonctionnalités, il existe de nombreuses variantes, notamment grep, egrep (Extended GREP), fgrep (GREP fixe), pgrep (GREP de processus), rgrep (GREP récursif) etc. Mais ces variantes présentent des différences mineures par rapport au grep original, ce qui les a rendues populaires et utilisées par divers programmeurs Linux pour des tâches spécifiques.

La principale chose qui reste à étudier est de savoir quelles sont les différences entre les trois variantes principales, à savoir 'grep', 'egrep' et 'fgrep'. de grep qui oblige les utilisateurs de Linux à choisir l'une ou l'autre version selon les besoins.

Quelques méta-caractères spéciaux de grep

  1. + – Équivalent à une ou plusieurs occurrences du caractère précédent.
  2. ? – Cela indique presque 1 répétition du caractère précédent. Comme : a? Correspondrait à 'a' ou 'aa'.
  3. ( – Début de l’expression d’alternance.
  4. ) – Fin de l'expression d'alternance.
  5. | – Correspond à l'une des expressions séparées par '|'. Comme : “(a|b)cde ” correspondrait soit à 'abcde', soit à 'bbcde'.
  6. { – Ce méta-caractère indique le début du spécificateur de plage. Comme : « a{2} » correspond à « aa » dans le fichier, c'est-à-dire a 2 fois.
  7. } – Ce méta-caractère indique le spécificateur de fin de plage.

Différences entre grep, egrep et fgrep

Certaines différences principales entre grep, egrep et fgrep peuvent être mises en évidence comme suit. Pour cet ensemble d'exemples, nous supposons que le fichier sur lequel l'opération est effectuée est :

Commande Grep

grep ou Global Regular Expression Print est le principal programme de recherche sur les systèmes de type Unix qui peut rechercher n'importe quel type de chaîne sur n'importe quel fichier ou liste de fichiers ou même la sortie de n'importe quel commande.

Lecture suggérée : 12 Exemples pratiques de commande Linux grep

Il utilise des expressions régulières de base en dehors des chaînes normales comme modèle de recherche. Dans les expressions régulières de base (BRE), les méta-caractères tels que : '{','}','(',')','|','+','?' perdent leur sens et sont traités comme des caractères normaux de chaîne et doivent être échappés s'ils doivent être traités comme des caractères spéciaux .

Lecture suggérée : 11 Commandes avancées « Grep » sur les classes de caractères et les expressions entre crochets

De plus, grep utilise l'algorithme de Boyer-Moore pour rechercher rapidement n'importe quelle chaîne ou expression régulière.

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

Comme ici, lorsque la commande est exécutée sans échapper '(' ')' et '|', elle recherche la chaîne complète, c'est-à-dire "(f|g )ile ” dans le fichier. Mais lorsque les caractères spéciaux étaient échappés, au lieu de les traiter comme faisant partie d'une chaîne, grep les traitait comme des méta-caractères et recherchait les mots « fichier » ou « gile » dans le fichier.

Commande Egrep

Egrep ou grep -E est une autre version de grep ou du grep étendu. Cette version de grep est efficace et rapide lorsqu'il s'agit de rechercher un modèle d'expression régulière car elle traite les méta-caractères tels quels et ne les remplace pas par des chaînes comme dans grep, et vous êtes donc libéré du fardeau de leur échapper. en grep. Il utilise ERE ou l'ensemble d'expressions régulières étendues.

Dans le cas d'egrep, même si vous n'échappez pas aux méta-caractères, il les traiterait comme des caractères spéciaux et les remplacerait par leur signification particulière au lieu de les traiter comme faisant partie d'une chaîne.

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

Comme ici, egrep a recherché la chaîne « fichier » lorsque les méta-caractères n'étaient pas échappés comme cela signifierait par la signification de ces caractères. Mais, lorsque ces caractères étaient échappés, egrep les traitait comme faisant partie d'une chaîne et recherchait la chaîne complète «(f|g)ile» dans le fichier.

Commande fgrep

Fgrep ou Fixed grep ou grep -F est encore une autre version de grep qui est rapide dans la recherche lorsqu'il s'agit de rechercher la chaîne entière au lieu de l'expression régulière car il ne reconnaît pas les expressions régulières, ni les méta-caractères. Pour rechercher une chaîne directe, c'est la version de grep qui doit être sélectionnée.

Fgrep recherche une chaîne complète et ne reconnaît même pas les caractères spéciaux dans le cadre d'une expression régulière, même s'ils ont été échappés ou non.

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

Par exemple, lorsque les méta-caractères n'étaient pas échappés, fgrep recherchait la chaîne complète « (f|g)ile » dans le fichier, et lorsque les méta-caractères étaient échappés, la commande fgrep recherchait « \(f\|g\)ile » tous les caractères tels quels dans le fichier.

Nous avons déjà couvert quelques exemples pratiques de commande grep, vous pouvez les lire ici, si vous souhaitez tirer le meilleur parti de la commande grep sous Linux.

Apprenez 12 exemples pratiques de commande Linux grep

Conclusion

Ci-dessus sont mises en évidence les différences entre 'grep', 'egrep' et 'fgrep'. Outre la différence dans l'ensemble des expressions régulières utilisées et la vitesse d'exécution, les paramètres de ligne de commande rest restent les mêmes pour les trois versions de grep et même au lieu de « egrep » ou « fgrep », « grep -E » ou « grep - F » sont recommandés.

Si vous constatez d'autres différences entre ces trois versions de grep, mentionnez-les dans vos commentaires.