Dans ce didacticiel, nous allons en savoir plus sur "grep" commande. Grep signifie G global r e régulier xpression p imprimer. Comme son nom l'indique, Grep est utilisé pour rechercher des fichiers texte avec des expressions régulières (brièvement regex ). Il imprime les lignes correspondant au motif donné dans un fichier texte. Si aucun fichier n'est donné, grep recherchera récursivement le motif donné dans les fichiers du répertoire courant. Grep a deux variantes, à savoir egrep et fgrep . Ces variantes sont obsolètes mais sont fournies pour une compatibilité descendante. Au lieu d'utiliser "grep -E" et "grep -F", vous pouvez utiliser respectivement "egrp" et "fgrep". Sans plus tarder, commençons.
Exemples de commandes Grep
J'ai un fichier nommé file.txt avec quelques mots au hasard. Jetons un coup d'œil au fichier.txt :
$ cat file.txt ostechnix Ostechnix o$technix linux linus unix technology hello world HELLO world
Pour commencer la recherche, tapez simplement grep suivi de ce que vous recherchez et d'où vous recherchez. Par exemple, je vais chercher la chaîne "nix" dans fichier.txt. Pour ce faire, je lance :
$ grep nix file.txt
Exemple de sortie :
ostechnix Ostechnix o$technix unix
Comme vous le voyez dans la sortie ci-dessus, nous avons deux mots contenant le modèle correspondant "nix". Si la chaîne de recherche contient deux mots, mentionnez-les entre guillemets simples comme ci-dessous.
$ grep 'hello world' file.txt hello world
Vous pouvez également utiliser -n drapeau pour afficher les numéros de ligne dans la sortie :
$ grep -n nix file.txt
Exemple de sortie :
1:ostechnix 2:Ostechnix 3:o$technix 6:unix
Cela peut être utile lorsque vous travaillez avec un code très long.
Veuillez noter que grep est sensible à la casse . Par exemple, lorsque vous recherchez "os" , il n'affichera pas les lignes contenant des lettres majuscules, c'est-à-dire Os.
Vérifiez l'exemple suivant.
$ grep os file.txt ostechnix
Mais, j'ai un autre mot nommé "Ostechnix" dans file.txt, mais grep ne l'a pas listé.
Si vous souhaitez toutefois ignorer la casse, vous pouvez utiliser "-i" drapeau comme ci-dessous.
$ grep -i os file.txt ostechnix Ostechn1x
$ grep -i 'hello world' file.txt hello world HELLO world
Maintenant, grep ne s'est pas soucié de la casse et nous avons obtenu les mots qui contiennent à la fois des lettres majuscules et minuscules dans le résultat.
Nous pouvons également diriger une sortie d'une commande vers grep. Regardez l'exemple suivant.
$ cat file.txt | grep os ostechnix
Maintenant, voyez ce que nous avons. La sortie du file.txt est redirigée vers grep et les mots contenant les lettres "os" dans file.txt ont été affichés.
Nous pouvons également utiliser des caractères spéciaux ou des expressions régulières dans grep.
- ^ - recherche en début de ligne.
- $ - recherche au bout de la ligne.
- . - Rechercher n'importe quel caractère.
Laissez-moi vous montrer un exemple, afin que vous puissiez comprendre où et comment utiliser ces caractères spéciaux.
Vous le savez déjà, nous pouvons rechercher les mots qui contiennent la chaîne "tech" comme ci-dessous.
$ grep tech file.txt ostechnix Ostechnix o$technix technology
Mais que se passe-t-il si vous vouliez simplement rechercher les lignes qui ne commencent que par le mot "tech". Vous ne voulez pas afficher tous les mots qui contiennent la chaîne, mais seulement les mots qui ont la chaîne "tech" au début. C'est également possible. C'est là que les caractères spéciaux deviennent utiles.
Pour rechercher les mots correspondant au modèle "tech" en début de ligne dans un fichier, exécutez :
$ grep ^tech file.txt technology
De même, nous pouvons rechercher les mots qui se terminent par une ou plusieurs lettres particulières, par exemple "x" , comme ci-dessous.
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
En outre, vous pouvez rechercher les mots contenant n'importe quel caractère en utilisant . (point).
Par exemple, recherchons n'importe quel mot qui a "n" dans le fichier.
$ grep .n file.txt ostechnix Ostechnix o$technix linux linus unix technology
Vous devriez maintenant avoir une compréhension de base de l'utilisation de grep. Continuons et apprenons les deux autres variantes, à savoir egrep et fgrep .
Exemples de commandes Egrep
egrep signifie e grep étendu . C'est similaire à "grep -E" commande. Il fera tout ce que grep fera. Cependant, il fournit des fonctionnalités supplémentaires, telles que l'utilisation de regex compliquées, par rapport à la commande grep normale.
Par exemple, nous pouvons rechercher tous les mots commençant par "l" ou "o" .
N'oubliez pas que nous utilisons le symbole caret (^) pour rechercher des mots en début de ligne. Par conséquent, notre commande pour la requête ci-dessus sera :
$ egrep '^(l|o)' file.txt ostechnix o$technix linux linus
Voir? Nous avons tous les mots qui commencent par "l" ou "o". Veuillez noter que la commande grep normale ne peut pas faire cela.
De même, nous pouvons rechercher les lignes commençant par n'importe quelle plage de caractères comprise entre "l" et "u". Cela signifie que nous obtiendrons les lignes commençant par l, m, n, o, p, q, r, s, t et u. Tout le reste sera omis du résultat.
$ egrep '^[l-u]' file.txt ostechnix o$technix linux linus unix technology
Veuillez noter que j'ai utilisé des crochets ([) pour rechercher la plage de mots. Étant donné que grep est sensible à la casse, il ne trouvera pas de lignes commençant par des lettres majuscules dans la plage donnée.
Pour afficher toutes les lignes commençant par des lettres majuscules et minuscules, nous utilisons :
$ egrep '^[l-u]|[L-U]' file.txt
Ou,
$ egrep '^([l-u]|[L-U])' file.txt
Exemple de sortie :
ostechnix Ostechnix o$technix linux linus unix technology HELLO world
Voir? Nous avons maintenant les mots qui commencent par la plage de caractères "l" à "u" (majuscules ou minuscules).
Exemples de commandes Fgrep
fgrep signifie f dernier grep . C'est similaire à "grep -F" . fgrep ne peut pas reconnaître les expressions régulières ou les caractères spéciaux. fgrep peut être utilisé là où vous souhaitez que les expressions régulières soient évaluées.
Par exemple, nous utilisons la commande suivante pour trouver les mots se terminant par "x" .
$ grep x$ file.txt ostechnix Ostechnix o$technix linux unix
Exécutez maintenant la même commande avec fgrep.
$ fgrep x$ file.txt
Il n'affichera rien, car il n'a pas pu évaluer les caractères spéciaux.
Voyons maintenant un autre exemple. Pour rechercher les mots qui correspondent à la chaîne "o$" avec la commande grep, nous faisons :
$ grep o$ file.txt
Mais, on n'obtient rien, pourquoi ? Parce que, selon la commande ci-dessus, nous utilisons le symbole dollar ($) pour trouver les mots qui se terminent par "o". Puisqu'il n'y avait pas de caractères se terminant par "o" dans file.txt, nous n'obtenons rien.
Maintenant, exécutez la même commande avec fgrep.
$ fgrep o$ file.txt o$technix
Voir? C'est ici que nous utilisons la commande fgrep. Il ignore simplement le symbole du dollar (le caractère spécial, bien sûr) et affiche le mot qui contient la chaîne "o$".
Pour plus de détails sur grep, tapez :
$ grep --help
Il donnera toutes les options possibles. Ou consultez les pages de manuel.
$ man grep
Suggestion de lecture :
- Apprenez à utiliser efficacement les pages de manuel
Étymologie de grep
Grep a été écrit du jour au lendemain par Ken Thompson , le même gars qui a écrit Unix. Mais pourquoi et comment a-t-il obtenu son nom ? Professeur Brian Kernighan explique l'étymologie de grep dans cette vidéo.
Et c'est tout. Grep est l'une des commandes importantes que vous devez apprendre à fond.
Vous savez maintenant ce qu'est grep et comment l'utiliser pour rechercher des fichiers texte avec des motifs correspondants sous GNU/Linux. Vous avez également appris comment Grep a obtenu son nom. J'espère que cela vous a été utile.