Bien que grep soit une commande Linux bien connue (nous l'avons déjà couverte en détail), savez-vous qu'il existe deux variantes différentes de cet outil ? Oui, ce sont egrep et fgrep . Dans ce didacticiel, nous aborderons ce dernier (fgrep) à l'aide d'exemples faciles à comprendre. Mais avant cela, il convient de mentionner que tous les exemples et instructions mentionnés dans ce didacticiel ont été testés sur Ubuntu 16.04LTS.
Commande Linux fgrep
Si vous jetez un œil à la documentation officielle, la page de manuel de la commande grep indique que fgrep n'est rien d'autre que grep -F. Il indique également que des variantes telles que fgrep et egrep ne sont fournies que pour la rétrocompatibilité. Nous aborderons ces détails plus tard dans ce didacticiel.
En attendant, voici la syntaxe de fgrep (qui est la même que celle de grep) :
grep [OPTIONS] PATTERN [FILE...]
Et voici comment la page de manuel de la commande grep explique l'outil :
grep searches the named input FILEs for lines containing a match to the given PATTERN. If no files
are specified, or if the file “-” is given, grep searches standard input. By default, grep prints
the matching lines.
Les exemples de style questions-réponses suivants devraient vous donner une meilleure idée du fonctionnement de fgrep.
Q1. En quoi fgrep est-il différent de grep et egrep ?
La commande fgrep diffère à la fois de grep et d'egrep en ce sens qu'elle interprète PATTERN comme une liste de chaînes fixes (au lieu d'expressions régulières), séparées par des retours à la ligne.
Puisqu'il est censé être identique à grep -F, voici comment un expert a expliqué l'option -F de grep sur StackExchange :
The-F
switch switches grep into a different mode where it accepts a pattern to match, but then
splits that pattern up into one search string per line and does an OR search on any of the strings
without doing any special pattern matching.
Q2. Comment utiliser fgrep ?
Pour comprendre l'utilisation de fgrep, prenons d'abord un exemple de base. Supposons qu'il existe un fichier (fichier1) contenant le contenu suivant :
Et il y a un autre fichier (words.txt) qui contient une liste de mots que nous voulons rechercher dans le fichier1.
Voici donc comment vous pouvez utiliser fgrep pour effectuer cette recherche :
fgrep -f words.txt file1
Ainsi, vous pouvez voir que les mots trouvés ont été surlignés en rouge. Maintenant, certains d'entre vous peuvent dire que c'est ce que grep et egrep feraient également dans ce cas, alors en quoi fgrep diffère ?
Premièrement, oui, vous avez raison. Les commandes grep et egrep produiraient également une sortie similaire :
Mais la différence sera claire dans le cas où file1 et words.txt contiennent le contenu suivant (observez les caractères spéciaux dans les mots) :
Ici, egrep et grep ne parviendront pas à trouver tous les mots :
Mais fgrep fonctionnera comme prévu :
Q3. N'y a-t-il vraiment aucune différence entre fgrep et grep ?
D'après la documentation officielle, il n'y a aucune différence entre fgrep et la commande grep -F. Cependant, il y aurait une différence majeure entre les deux outils :l'algorithme de correspondance de chaînes qu'ils utilisent. Alors que fgrep utilise l'algorithme Aho-Corasick, grep utilise une version modifiée de Commentz-Walter.
"Cela signifie que grep
a une complexité O(mn) dans le pire des cas tandis que fgrep
est au pire O(m+n)", déclare un expert sur les forums StackExchange.
Conclusion
Comme on le voit, la commande fgrep n'est pas difficile à comprendre et à utiliser. En ce qui concerne la différence entre fgrep et grep -F, bien que nous ayons déjà noté les points au troisième trimestre, nous pensons que ce problème ne devrait pas déranger une grande partie des utilisateurs. En cas de doute ou si vous avez une question concernant fgrep, partagez-la avec nous en laissant un commentaire ci-dessous.