Le nom grep vient de la commande ed (et vim) "g/re/p", ce qui signifie rechercher globalement une expression régulière donnée et imprimer (afficher) la sortie.
Ordinaire Expressions
Les utilitaires permettent à l'utilisateur de rechercher dans les fichiers texte des lignes qui correspondent à une expression régulière (expression régulière). Une expression régulière est une chaîne de recherche composée de texte et d'un ou plusieurs des 11 caractères spéciaux. Un exemple simple consiste à faire correspondre le début d'une ligne.
Exemple de fichier
La forme de base de grep peut être utilisé pour rechercher du texte simple dans un ou plusieurs fichiers particuliers. Afin d'essayer les exemples, créez d'abord le fichier d'exemple.
Utilisez un éditeur tel que nano ou vim pour copier le texte ci-dessous dans un fichier appelé mon fichier.
xyzxyzde
exyzd
dexyz
ré?gxyz
xxz
xzz
x\z
x*z
xz
xz
XYZ
XYYZ
xYz
xyyz
xyyyz
xyyyyz
Bien que vous puissiez copier et coller les exemples dans le texte (notez que les guillemets doubles peuvent ne pas copier correctement), les commandes doivent être saisies afin de les apprendre correctement.
Avant d'essayer les exemples, consultez l'exemple de fichier :
$ cat monfichier
Recherche simple
Pour trouver le texte « xyz » dans le fichier, exécutez la commande suivante :
$ grep xyz monfichier
Utiliser des couleurs
Pour afficher les couleurs, utilisez -color (un double tiret) ou créez simplement un alias. Par example:
$ grep --color xyz monfichierou alors
$ alias grep='grep --color'$ grep xyz monfichier
Options
Options courantes utilisées avec le grep la commande comprend :
- -je trouve toutes les lignes indépendamment de cas
- -c compter combien de lignes contiennent le texte
- -n afficher la ligne Nombres des lignes correspondantes
- -l'affichage seulement déposer des noms ce match
- -r récursif recherche de sous-répertoires
- -v trouver toutes les lignes NE PAS contenant le texte
Par example:
$ grep -i xyz monfichier # recherche de texte quelle que soit la casse$ grep -ic xyz monfichier # compte les lignes contenant du texte
$ grep -in xyz myfile # afficher les numéros de ligne
Créer plusieurs fichiers
Avant d'essayer de rechercher plusieurs fichiers, créez d'abord plusieurs nouveaux fichiers :
$ echo xyz>monfichier1$ echo -e "xyz\nxzz\nXYZ">monfichier2
$ echo -e "xxx\nyyy">monfichier3
$ cat monfichier1
$ cat monfichier2
$ cat monfichier3
Rechercher plusieurs fichiers
Pour rechercher plusieurs fichiers à l'aide de noms de fichiers ou d'un caractère générique, saisissez :
$ grep -ic xyz monfichier monfichier1 monfichier2 monfichier3$ grep -in xyz mon*
# correspond aux noms de fichiers commençant par 'my'
Exercice I
- Comptez d'abord combien de lignes il y a dans le fichier /etc/passwd.
- Trouvez maintenant toutes les occurrences du texte var dans le fichier /etc/passwd.
- Trouver combien de lignes dans le fichier contiennent le texte
- Trouvez combien de lignes ne contiennent PAS le texte var.
- Trouvez l'entrée pour votre login dans le /etc/passwd
Des solutions d'exercice peuvent être trouvées à la fin de cet article.
Utiliser des expressions régulières
La commande grep peut également être utilisé avec des expressions régulières en utilisant un ou plusieurs des onze caractères spéciaux ou symboles pour affiner la recherche. Une expression régulière est une chaîne de caractères qui inclut des caractères spéciaux pour permettre la correspondance de modèles dans des utilitaires tels que grep, vigueur et sed. Notez que les chaînes peuvent devoir être placées entre guillemets.
Les caractères spéciaux disponibles incluent :
^ | Début d'une ligne |
$ | Fin d'une ligne |
. | N'importe quel caractère (sauf \n saut de ligne) |
* | 0 ou plus de l'expression précédente |
\ | Précéder un symbole en fait un caractère littéral |
Notez que le *, qui peut être utilisé sur la ligne de commande pour correspondre à n'importe quel nombre de caractères, y compris aucun, est ne pas utilisé de la même manière ici.
Notez également l'utilisation de guillemets dans les exemples suivants.
Exemples
Pour rechercher toutes les lignes commençant par du texte à l'aide du caractère ^ :
$ grep '^xyz' monfichierPour rechercher toutes les lignes se terminant par du texte à l'aide du caractère $ :
$ grep 'xyz$' monfichierPour rechercher des lignes contenant une chaîne utilisant à la fois les caractères ^ et $ :
$ grep '^xyz$' monfichierPour rechercher des lignes à l'aide de . pour correspondre à n'importe quel caractère :
$ grep '^x.z' monfichier
Pour rechercher des lignes en utilisant le * pour correspondre à 0 ou plus de l'expression précédente :
$ grep '^xy*z' monfichierPour rechercher des lignes en utilisant .* pour correspondre à 0 ou plus de n'importe quel caractère :
$ grep '^x.*z' monfichierPour rechercher des lignes à l'aide de la \ pour échapper au caractère * :
$ grep '^x\*z' monfichierPour trouver le caractère \, utilisez :
$ grep '\\' monfichier
Expression grep - egrep
le grep la commande ne prend en charge qu'un sous-ensemble des expressions régulières disponibles. Cependant, la commande egrep :
- permet l'utilisation complète de toutes les expressions régulières
- peut rechercher simultanément plusieurs expressions
Notez que les expressions doivent être entourées d'une paire de guillemets.
Pour utiliser des couleurs, utilisez -color ou créez à nouveau un alias :
$ alias egrep='egrep --color'Pour rechercher plus d'un expression régulière les egrep la commande peut être écrite sur plusieurs lignes. Cependant, cela peut également être fait en utilisant ces caractères spéciaux :
| | Alternance, soit l'une soit l'autre |
(… ) | Regroupement logique d'une partie d'une expression |
Cela extrait les lignes qui commencent par root, uucp ou mail du fichier, le | symbole signifiant l'une des options.
La commande suivante va ne pas fonctionner, bien qu'aucun message ne s'affiche, car le grep La commande ne prend pas en charge toutes les expressions régulières :
$ grep '(^root|^uucp|^mail)' /etc/passwdCependant, sur la plupart des systèmes Linux, la commande grep -E est la même chose que d'utiliser egrep:
$ grep -E '(^root|^uucp|^mail)' /etc/passwd
Utilisation de filtres
Tuyauterie est le processus d'envoi de la sortie d'une commande en entrée dans une autre commande et est l'un des outils Linux les plus puissants disponibles.
Les commandes qui apparaissent dans un pipeline sont souvent appelées filtres car, dans de nombreux cas, elles passent au crible ou modifient l'entrée qui leur est transmise avant d'envoyer le flux modifié vers la sortie standard.
Dans l'exemple suivant, la sortie standard de ls -l est transmis comme entrée standard au grep commander. Sortie du grep la commande est ensuite transmise en entrée au Suite commander.
Cela affichera uniquement les répertoires dans /etc:
$ ls -l /etc|grep '^d'|more
Les commandes suivantes sont des exemples d'utilisation de filtres :
$ ps -ef|grep cron$ who|grep kdm
Exemple de fichier
Pour essayer l'exercice de révision, créez d'abord l'exemple de fichier suivant.
Utilisez un éditeur tel que nano ou vim pour copier le texte ci-dessous dans un fichier appelé gens:
Personnel J.Forgeron 25000Personnel E.Smith 25400
Formation A.Marron 27500
Formation C.Brown 23400
(Administrateur) R.Bron 30500
Goodsout T.Smyth 30000
Personnel F.Jones 25000
formation* C.Evans 25500
Goodsout W.Pape 30400
Rez-de-chaussée T.Smythe 30500
Personnel J.Maler 33000
Exercice II
- Afficher le fichier gens et examiner son contenu.
- Trouver toutes les lignes contenant la chaîne Forgeron dans le fichier personnes.Astuce : utilisez la commande grep mais rappelez-vous que par défaut, elle est sensible à la casse.
- Créez un nouveau fichier, npeople, contenant toutes les lignes commençant par la chaîne Personnel dans le fichier personnes.Astuce : utilisez la commande grep avec >.
- Confirmez le contenu du fichier npeople en listant le fichier.
- Ajoutez maintenant toutes les lignes où le texte se termine par la chaîne 500 dans le fichier people vers le fichier npeople.Astuce : utilisez la commande grep avec >>.
- Encore une fois, confirmez le contenu du fichier npeople en listant le fichier.
- Trouvez l'adresse IP du serveur qui est stockée dans le fichier /etc/hôtes.Astuce : utilisez la commande grep avec $(hostname)
- Utiliser egrep d'extraire de la /etc/passwd fichiers de lignes de compte contenant lp ou le vôtre identifiant d'utilisateur.
Des solutions d'exercice peuvent être trouvées à la fin de cet article.
Plus d'expressions régulières
Une expression régulière peut être considérée comme des caractères génériques sur les stéroïdes.
Il y a onze caractères avec des significations particulières : les crochets ouvrants et fermants [ ], la barre oblique inverse \, le caret ^, le signe dollar $, le point ou le point ., la barre verticale ou le symbole du tuyau |, le point d'interrogation ?, l'astérisque ou l'étoile *, le signe plus + et les crochets ouvrants et fermants . Ces caractères spéciaux sont aussi souvent appelés métacaractères.
Voici l'ensemble complet des caractères spéciaux :
^ | Début d'une ligne |
$ | Fin d'une ligne |
. | N'importe quel caractère (sauf \n saut de ligne) |
* | 0 ou plus de l'expression précédente |
| | Alternance, soit l'une soit l'autre |
[…] | Ensemble explicite de caractères à faire correspondre |
+ | 1 ou plusieurs de l'expression précédente |
? | 0 ou 1 de l'expression précédente |
\ | Précéder un symbole en fait un caractère littéral |
… | Notation de quantificateur explicite |
(… ) | Regroupement logique d'une partie d'une expression |
La version par défaut de grep n'a qu'une prise en charge limitée des expressions régulières. Pour que tous les exemples suivants fonctionnent, utilisez egrep à la place ou grep -E.
Pour rechercher des lignes à l'aide de la | pour correspondre à l'une ou l'autre des expressions :
$ egrep 'xxz|xzz' monfichierPour rechercher des lignes en utilisant | pour faire correspondre l'une ou l'autre expression dans une chaîne, utilisez également ( ):
$ egrep '^x(Yz|yz)' monfichier
Pour rechercher des lignes en utilisant [ ] pour correspondre à n'importe quel caractère :
$ egrep '^x[Yy]z' monfichierPour rechercher des lignes en utilisant [ ] pour ne correspondre à aucun caractère :
$ egrep '^x[^Yy]z' monfichierPour rechercher des lignes en utilisant le * pour correspondre à 0 ou plus de l'expression précédente :
$ egrep '^xy*z' monfichier
Pour rechercher des lignes en utilisant le + pour correspondre à 1 ou plusieurs de l'expression précédente :
$ egrep '^xy+z' monfichierPour rechercher des lignes à l'aide de ? pour correspondre à 0 ou 1 de l'expression précédente :
$ egrep '^xy?z' monfichier
Exercice III
- Trouver toutes les lignes contenant les noms Evans ou alors Maler dans le fichier personnes.
- Trouver toutes les lignes contenant les noms Smith, Smith ou alors Smythe dans le fichier personnes.
- Trouver toutes les lignes contenant les noms Marron, Marron ou alors Bron dans le fichier personnes.Si vous avez le temps:
- Trouver la ligne contenant la chaîne (administrateur), y compris les parenthèses, dans le fichier people.
- Trouvez la ligne contenant le caractère * dans le fichier people.
- Combinez 5 et 6 ci-dessus pour trouver les deux expressions.
Plus d'exemples
Pour rechercher des lignes en utilisant . et * pour correspondre à n'importe quel jeu de caractères :
$ egrep '^xy.*z' monfichierPour rechercher des lignes en utilisant pour faire correspondre un nombre N de caractères :
$ egrep '^xy3z' monfichier$ egrep '^xy4z' monfichier
Pour rechercher des lignes à l'aide de pour correspondre au moins à N fois :
$ egrep '^xy3,z' monfichierPour trouver des lignes en utilisant pour faire correspondre N fois mais pas plus de M fois :
$ egrep '^xy2,3z' monfichier
Conclusion
Dans ce tutoriel, nous avons d'abord examiné l'utilisation grep sous sa forme simple pour rechercher du texte dans un fichier ou dans plusieurs fichiers. Nous avons ensuite combiné le texte à rechercher avec des expressions régulières simples puis des expressions plus complexes en utilisant egrep.
Prochaines étapes
J'espère que vous mettrez à profit les connaissances acquises ici. Essaie grep commandes sur vos propres données et rappelez-vous, les expressions régulières décrites ici peuvent être utilisées sous la même forme dans vi, sed et ok!
Solutions d'exercice
Exercice I
Comptez d'abord combien de lignes il y a dans le fichier /etc/passwd.$ wc -l /etc/passwd
Trouvez maintenant toutes les occurrences du texte var dans le fichier /etc/passwd.$ grep var /etc/passwd
Trouver combien de lignes dans le fichier contiennent le texte var
Trouvez combien de lignes ne contiennent PAS le texte var.
grep -cv var /etc/passwdTrouvez l'entrée pour votre login dans le /etc/passwd déposergrep kdm /etc/passwd
Exercice II
Afficher le fichier gens et examiner son contenu.$ chats
Trouver toutes les lignes contenant la chaîne Forgeron dans le fichier gens.$ grep 'Smith' personnes
Créer un nouveau fichier, n personnes, contenant toutes les lignes commençant par la chaîne Personnel dans le gens déposer$ grep '^Personnel' personnes> npersonnes
Confirmer le contenu du fichier n personnes en listant le fichier.$ chat npersonnes
Ajoutez maintenant toutes les lignes où le texte se termine par la chaîne 500 dans le fichier gens au fichier n personnes.$ grep '500$' personnes>>npersonnes
Encore une fois, confirmez le contenu du fichier n personnes en listant le fichier.$ chat npersonnes
Trouvez l'adresse IP du serveur qui est stockée dans le fichier /etc/hôtes.$ grep $(nom d'hôte) /etc/hosts
Utiliser egrep d'extraire de la /etc/passwd fichiers de lignes de compte contenant lp ou votre propre identifiant.$ egrep '(lp|kdm:)' /etc/passwd
Exercice III
Trouver toutes les lignes contenant les noms Evans ou alors Maler dans le fichier gens.$ egrep 'Evans|Maler' personnes
Trouver toutes les lignes contenant les noms Forgeron, Forgeron ou alors Smythe dans le fichier gens.$ egrep 'Sm(i|y)le?' gens
Trouver toutes les lignes contenant les noms marron, Brown ou alors Bron dans le fichier personnes.$ egrep 'Brow?e?et les gens
Trouver la ligne contenant la chaîne (administrateur), incluant les crochets, dans le dossier gens.
Trouver la ligne contenant le caractère * dans le fichier personnes.$ egrep '\*' personnes
Combinez 5 et 6 ci-dessus pour trouver les deux expressions.