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

Using Grep With Regular Expressions



Ce tutoriel explique comment utiliser les deux saisir (et egrep) t o 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 termine.

Le nom saisir 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.







Régulier 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 saisir 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
d?gxyz
xxz
xzz
xz
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 :



$chatmon fichier

Recherche simple

Pour trouver le texte « xyz » dans le fichier, exécutez la commande suivante :

$saisirxyz monfichier

Utiliser des couleurs

Pour afficher les couleurs, utilisez –color (un double tiret) ou créez simplement un alias. Par exemple:

$saisir --Couleurxyz monfichier

ou

$alias saisir= 'saisir--Couleur'
$saisirxyz monfichier

Options

Options courantes utilisées avec le saisir 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 afficher uniquement déposer noms ce match
  • -r récursif recherche de sous-répertoires
  • -v trouver toutes les lignes NE PAS contenant le texte

Par exemple:

$saisir -jexyz monfichier# recherche de texte quelle que soit la casse

$saisir -icxyz monfichier# compter les lignes avec du texte

$saisir -dansxyz monfichier# afficher les numéros de ligne

Créer plusieurs fichiers

Avant d'essayer de rechercher plusieurs fichiers, créez d'abord plusieurs nouveaux fichiers :

$chassèrentxyz>monfichier1
$chassèrent -Etxyz xzz XYZ>monfichier2
$chassèrent -Etxxx yyy>monfichier3
$chatmonfichier1
$chatmonfichier2
$chatmonfichier3

Rechercher plusieurs fichiers

Pour rechercher plusieurs fichiers à l'aide de noms de fichiers ou d'un caractère générique, saisissez :

$saisir -icxyz monfichier monfichier1 monfichier2 monfichier3
$saisir -dansxyz mon*
# correspond aux noms de fichiers commençant par « my »

Exercice I

  1. Comptez d'abord le nombre de lignes dans le fichier /etc/passwd.
Astuce : utiliserwc -l /etc/mot de passe
  1. Trouvez maintenant toutes les occurrences du texte 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 .
  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.

Utilisation d'expressions régulières

La commande saisir peut également être utilisé avec des expressions régulières en utilisant un ou plusieurs des onze caractères ou symboles spéciaux 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èle dans des utilitaires tels que saisir , je suis venu 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 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 ^ :

$saisir'^xyz' monfichier

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

$saisir'xyz$' monfichier

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

$saisir'^xyz$' monfichier

Pour rechercher des lignes à l'aide de la . pour correspondre à n'importe quel caractère :

$saisir'^x.z' monfichier

Pour rechercher des lignes en utilisant le * pour correspondre à 0 ou plus de l'expression précédente :

$saisir'^xy*z 'monfichier

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

$saisir'^ X.*z 'monfichier

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

$saisir'^ X *z 'monfichier

Pour trouver le caractère , utilisez :

$saisir'\' mon fichier

Expression grep – egrep

Les saisir 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
$egrep '(^root|^uucp|^mail)' /etc/mot de passe

Cela extrait les lignes qui commencent par root, uucp ou mail du fichier, le | symbole signifiant l'une ou l'autre des options.

La commande suivante va ne pas fonctionner, bien qu'aucun message ne s'affiche, car le saisir La commande ne prend pas en charge toutes les expressions régulières :

$saisir '(^root|^uucp|^mail)' /etc/mot de passe

Cependant, sur la plupart des systèmes Linux, la commande grep -E est la même chose que d'utiliser egrep :

$saisir -ET '(^root|^uucp|^mail)' /etc/mot de passe

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 saisir commander. Sortie du saisir la commande est ensuite transmise en entrée au Suite commander.

Cela affichera uniquement les répertoires dans /etc :

$ls -l /etc|saisir'^d'|Suite

Les commandes suivantes sont des exemples d'utilisation de filtres :

$ps -ef|saisircron

$qui|saisirkdm

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é personnes:

Personnel J. Smith 25000
E. Smith personnel 25400
Formation A.Brown 27500
Formation C.Browen 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 personnes et examiner son contenu.
  2. Trouver toutes les lignes contenant la chaîne Forgeron dans le fichier people.Indice : 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 people.Indice : utilisez la commande grep avec >.
  4. Confirmez le contenu du fichier npeople en répertoriant 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.Indice : utilisez la commande grep avec >>.
  6. Encore une fois, confirmez le contenu du fichier npeople en répertoriant le fichier.
  7. Trouvez l'adresse IP du serveur qui est stockée dans le fichier /etc/hôtes .Indice : utilisez la commande grep avec $(hostname)
  8. Utilisation 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 un caractère générique sur les stéroïdes.

Il y a onze caractères avec des significations spéciales : 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 tube |, le point d'interrogation ?, le astérisque ou étoile *, le signe plus + et l'accolade ouvrante et fermante { }. 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 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 saisir 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)' mon fichier

Pour rechercher des lignes en utilisant [ ] pour correspondre à n'importe quel caractère :

$egrep'^ X[Oui]z 'monfichier

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

$egrep'^ X[^ Oui]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 trouver des lignes en utilisant le ? 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 peintre dans le fichier people.
  2. Trouver toutes les lignes contenant les noms Smith, Smith ou Smythe dans le fichier people.
  3. Trouver toutes les lignes contenant les noms Marron, Marron ou La source dans le fichier people.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'^xy{3}z 'monfichier
$egrep'^xy{4}z 'monfichier

Pour rechercher des lignes à l'aide de { } pour faire correspondre N fois ou plus :

$egrep'^xy{3,}z 'monfichier

Pour trouver des lignes en utilisant { } pour faire correspondre N fois mais pas plus de M fois :

$egrep'^xy{2,3}z 'monfichier

Conclusion

Dans ce tutoriel, nous avons d'abord examiné l'utilisation saisir sous une 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. Expérimenter saisir 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 nous , 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 dans le fichier /etc/passwd.
$ grep var /etc/passwd
Trouver combien de lignes dans le fichier contiennent le texte

saisir -c/etc/mot de passe

Trouvez combien de lignes ne contiennent PAS le texte .

saisir -CV/etc/mot de passe

Trouvez l'entrée pour votre login dans le /etc/passwd déposer
grep kdm /etc/passwd

Exercice II

Afficher le fichier personnes et examiner son contenu.
$ cat people
Trouver toutes les lignes contenant la chaîne Forgeron dans le fichier personnes .
$ grep 'Smith' people
Créer un nouveau fichier, n personnes , contenant toutes les lignes commençant par la chaîne Personnel dans le personnes déposer
$ grep '^Personal' people> npeople
Confirmer le contenu du fichier n personnes en listant le fichier.
$ cat npeople
Ajoutez maintenant toutes les lignes où le texte se termine par la chaîne 500 dans le fichier personnes au fichier n personnes .
$ grep '500$' people>>npeople
Encore une fois, confirmez le contenu du fichier n personnes en listant le fichier.
$ cat npeople
Trouvez l'adresse IP du serveur qui est stockée dans le fichier /etc/hôtes .
$ grep $(hostname) /etc/hosts
Utilisation 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 peintre dans le fichier personnes .
$ egrep 'Evans|Maler' people
Trouver toutes les lignes contenant les noms Forgeron , Forgeron ou Smythe dans le fichier personnes .
$ egrep 'Sm(i|y)the?' people
Trouver toutes les lignes contenant les noms brun , Brown ou La source dans le fichier people.
$ egrep 'Brow?e?n' people
Trouver la ligne contenant la chaîne (administrateur), incluant les crochets, dans le dossier personnes .

$egrep '(Admin)'personnes

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

$egrep '(Admin)|*'personnes