grep

Utilisation de grep (et egrep) avec des expressions régulières

Utilisation de grep (et egrep) avec des expressions régulières
Ce tutoriel explique comment utiliser les deux grep (et egrep) to rechercher du texte dans des fichiers, sous leur forme simple et lorsqu'ils sont combinés avec des expressions régulières. Il contient plusieurs exemples et des exercices, plus solutions, pour que le spectateur complète.

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.

xyz
xyzde
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 monfichier

ou alors

$ alias grep='grep --color'
$ grep xyz monfichier

Options

Options courantes utilisées avec le grep la commande comprend :

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

  1. Comptez d'abord combien de lignes il y a dans le fichier /etc/passwd.
Astuce : utilisez wc -l /etc/passwd
  1. Trouvez maintenant toutes les occurrences du texte var dans le fichier /etc/passwd.
  2. Trouver combien de lignes dans le fichier contiennent le texte
  3. Trouvez combien de lignes ne contiennent PAS le texte var.
  4. 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' monfichier

Pour rechercher toutes les lignes se terminant par du texte à l'aide du caractère $ :

$ grep 'xyz$' monfichier

Pour rechercher des lignes contenant une chaîne utilisant à la fois les caractères ^ et $ :

$ grep '^xyz$' monfichier

Pour 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' monfichier

Pour rechercher des lignes en utilisant .* pour correspondre à 0 ou plus de n'importe quel caractère :

$ grep '^x.*z' monfichier

Pour rechercher des lignes à l'aide de la \ pour échapper au caractère * :

$ grep '^x\*z' monfichier

Pour 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 :

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
$ egrep '(^root|^uucp|^mail)' /etc/passwd

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/passwd

Cependant, 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       25000
Personnel       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

  1. Afficher le fichier gens et examiner son contenu.
  2. 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.
  3. 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 >.
  4. Confirmez le contenu du fichier npeople en listant le fichier.
  5. 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 >>.
  6. Encore une fois, confirmez le contenu du fichier npeople en listant le fichier.
  7. Trouvez l'adresse IP du serveur qui est stockée dans le fichier /etc/hôtes.Astuce : utilisez la commande grep avec $(hostname)
  8. 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' monfichier

Pour 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' monfichier

Pour rechercher des lignes en utilisant [ ] pour ne correspondre à aucun caractère :

$ egrep '^x[^Yy]z' monfichier

Pour 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' monfichier

Pour rechercher des lignes à l'aide de ? pour correspondre à 0 ou 1 de l'expression précédente :

$ egrep '^xy?z' monfichier

Exercice III

  1. Trouver toutes les lignes contenant les noms Evans ou alors Maler dans le fichier personnes.
  2. Trouver toutes les lignes contenant les noms Smith, Smith ou alors Smythe dans le fichier personnes.
  3. Trouver toutes les lignes contenant les noms Marron, Marron ou alors Bron dans le fichier personnes.Si vous avez le temps:
  4. Trouver la ligne contenant la chaîne (administrateur), y compris les parenthèses, dans le fichier people.
  5. Trouvez la ligne contenant le caractère * dans le fichier people.
  6. 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' monfichier

Pour 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' monfichier

Pour 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

grep -c var /etc/passwd

Trouvez combien de lignes ne contiennent PAS le texte var.

grep -cv var /etc/passwd

Trouvez l'entrée pour votre login dans le /etc/passwd déposer
grep 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.

$ egrep '\(Admin\)' personnes

Trouver la ligne contenant le caractère * dans le fichier personnes.
$ egrep '\*' personnes
Combinez 5 et 6 ci-dessus pour trouver les deux expressions.

$ egrep '\(Admin\)|\*' personnes


Comment inverser le sens de défilement de la souris et des pavés tactiles dans Windows 10
Souris et Pavé tactiles rendent non seulement l'informatique facile, mais plus efficace et moins chronophage. Nous ne pouvons pas imaginer une vie san...
Comment changer la taille, la couleur et le schéma du pointeur et du curseur de la souris sous Windows 10
Le pointeur et le curseur de la souris dans Windows 10 sont des aspects très importants du système d'exploitation. Cela peut également être dit pour d...
Moteurs de jeux gratuits et open source pour le développement de jeux Linux
Cet article couvrira une liste de moteurs de jeux gratuits et open source qui peuvent être utilisés pour développer des jeux 2D et 3D sur Linux. Il ex...