Utilisation de Grep avec des expressions régulières

Utilisation de Grep avec des expressions régulières
Ce tutoriel décrit comment utiliser les deux grep (et egrep) to Trouver du texte dans les fichiers, sous leur forme simple et lorsqu'il est combiné avec des expressions régulières. Il contient plusieurs exemples et des exercices, plus solutions, Pour que le spectateur soit terminé.

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.

Régulier Expressions

Les utilitaires permettent à l'utilisateur de rechercher des fichiers texte pour les lignes qui correspondent à une expression régulière (regexp). Une expression régulière est une chaîne de recherche composée de texte et un ou plusieurs des 11 caractères spéciaux. Un exemple simple correspond au début d'une ligne.

Exemple de fichier

La forme de base de grep peut être utilisé pour trouver du texte simple dans un fichier ou des fichiers particuliers. Afin d'essayer les exemples, créez d'abord l'exemple de fichier.

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
x \ z
x * z
xz
x z
Xyz
Xyyz
xyz
xyyz
xyyyz
xyyyyz

Bien que vous puissiez copier et coller les exemples dans le texte (notez que les doubles devis peuvent ne pas copier correctement), les commandes doivent être saisies afin de les apprendre correctement.

Avant d'essayer les exemples, affichez l'exemple de fichier:

chat myfile
xyz
xyzde
exyzd
dexyz
d?gxyz
xxz
xzz
x \ z
x * z
xz
x z
Xyz
Xyyz
xyz
xyyz
xyyyz
xyyyyz

Recherche simple

Pour trouver le texte «xyz» dans le fichier, exécutez ce qui suit:

grep xyz myfile
xyz
xyzde
exyzd
dexyz
d?gxyz

Options

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

  • -Je trouve toutes les lignes irressif de cas
  • -c compter Combien de lignes contiennent le texte
  • -n ligne d'affichage Nombres de lignes correspondantes
  • -l Affichage uniquement déposer des noms ce match
  • -r récursif recherche de sous-répertoires
  • -V trouver toutes les lignes PAS contenant le texte

Par exemple:

grep -i xyz myfile
# trouver du texte, quel que soit le cas
xyz
xyzde
exyzd
dexyz
d?gxyz
Xyz
xyz
grep -ic xyz myfile
# compter les lignes avec du texte
7
grep -in xyz myfile
# Afficher les numéros de ligne
1: xyz
2: xyzde
3: exyzd
4: Dexyz
5: D?gxyz
12: xyz
14: xyz

Créer plusieurs fichiers

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

echo xyz> myfile1
chat myfile1
xyz
echo -e 'xyz \ nxzz \ nxyz'> myfile2
chat myfile2
xyz
xzz
Xyz
echo -e 'xxx \ nyyy'> myfile3
chat myfile3
xxx
tout

Rechercher plusieurs fichiers

Pour rechercher plusieurs fichiers à l'aide de noms de fichiers ou d'un wildcard Entrée:

grep -ic xyz myfile myfile1 myfile2 myfile3
Myfile: 7
myfile1: 1
myFile2: 2
myFile3: 0
# correspondre aux noms de fichiers commençant par «mon»
grep -in xyz mon *
MyFile: 1: XYZ
Myfile: 2: xyzde
myfile: 3: exyzd
MyFile: 4: Dexyz
Myfile: 5: D?gxyz
MyFile: 12: XYZ
MyFile: 14: XYZ
myFile1: 1: xyz
myFile2: 1: xyz
myFile2: 3: xyz

Exercice I

  1. Comptez d'abord combien de lignes il y a dans le fichier / etc / passwd.
Astuce: utilisez wc -l / etc / passwd
  1. Maintenant, trouvez toutes les occurrences du texte var Dans le fichier / etc / passwd.
  2. Trouvez le nombre de lignes dans le fichier contiennent le texte
  3. Trouvez combien de lignes ne contiennent pas le texte var.
  4. Trouvez l'entrée de votre connexion dans le / etc / passwd

Des solutions d'exercice peuvent être trouvées à la fin de cet article.

En utilisant 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 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 motifs au sein des services publics tels que grep, vigueur et sed. Notez que les cordes peuvent devoir être enfermées en citations.

Les caractères spéciaux disponibles comprennent:

^ Début d'une ligne
$ Fin d'une ligne
. Tout caractère (sauf \ n newline)
* 0 ou plus d'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 pas utilisé de la même manière ici.

Notez également l'utilisation des citations dans les exemples suivants.

Exemples

Pour trouver toutes les lignes commençant par du texte en utilisant le caractère ^:

grep '^ xyz' myfile

Pour trouver toutes les lignes se terminant par du texte en utilisant le caractère $:

grep 'xyz $' myfile

Pour trouver des lignes contenant une chaîne en utilisant les caractères ^ et $:

grep '^ xyz $' myfile

Pour trouver des lignes en utilisant le . Pour correspondre à n'importe quel personnage:

grep '^ x.z 'myfile

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

grep '^ xy * z' myfile

Pour trouver des lignes en utilisant .* Pour correspondre à 0 ou plus de tout personnage:

grep '^ x.* z 'myfile

Pour trouver des lignes en utilisant le \ Pour échapper au * caractère:

grep '^ x \ * z' myfile

Pour trouver l'utilisation du caractère:

grep '\\' myfile

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 plus d'une expression

Notez que les expressions doivent être enfermées dans une paire de citations.

Afin de rechercher plus d'un expirat le faire un coup de pouce La commande peut être écrite sur plusieurs lignes. Cependant, cela peut également être fait en utilisant ces caractères spéciaux:

| Alternance, soit l'un ou l'autre
(…) Groupement logique d'une partie d'une expression
egrep '(^ root | ^ uucp | ^ mail)' / etc / passwd

Cela extrait les lignes qui commencent par la racine, l'UUCP ou le courrier du fichier, le | Symbole signifiant soit les options.

La commande suivante pas Travail, bien qu'aucun message ne soit affiché, car le base 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 le même que l'utilisation faire un coup de pouce:

grep -e '(^ root | ^ uucp | ^ mail)' / etc / passwd

Utilisation des filtres

Tuyauterie est le processus d'envoi de la sortie d'une commande comme 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, ils passent ou modifient l'entrée qui leur est transmise avant d'envoyer le flux modifié à la sortie standard.

Dans l'exemple suivant, la sortie standard de ls -l est passé comme entrée standard au grep commande. Sortie du grep La commande est ensuite transmise comme entrée au plus commande.

Cela affichera uniquement les répertoires dans /etc:

ls -l / etc | grep '^ d' | plus

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

ps -ef | grep cron
qui | grep kdm

Exemple de fichier

Afin d'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:

J Personnel.Smith 25000
E.Smith 25400
Formation.Brun 27500
Formation C.Browen 23400
(Admin) r.Bron 30500
Marchandises.Smyth 30000
F.Jones 25000
Formation * C.Evans 25500
Marchandises W.Pape 30400
Fond de sol t.Smythe 30500
J Personnel.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, les gens.Astuce: utilisez la commande grep mais n'oubliez pas que par défaut, il est sensible à la casse.
  3. Créer un nouveau fichier, npeople, contenant toutes les lignes commençant par la chaîne Personnel Dans le fichier des gens.Astuce: utilisez la commande grep avec>.
  4. Confirmez le contenu du fichier npeople en répertoriant le fichier.
  5. Maintenant, ajoutez toutes les lignes où le texte se termine par la chaîne 500 Dans le fichier, les gens du fichier npeople.Astuce: utilisez la commande grep avec >>.
  6. Encore une fois, confirmez le contenu du fichier npeople en répertoriant le fichier.
  7. Recherchez l'adresse IP du serveur qui est stocké dans le fichier / etc / hôtes.Astuce: utilisez la commande grep avec $ (nom d'hôte)
  8. Utiliser faire un coup de pouce pour extraire du / etc / passwd Lignes de compte de fichier contenant LP ou le vôtre ID de l'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 faunes sur les stéroïdes.

Il y a onze caractères avec des significations spéciales: les crochets d'ouverture et de fermeture [], la barre arrière \, le caret ^, le signe du dollar $, la période ou le point ., la barre verticale ou le symbole de tuyau |, le point d'interrogation ?, L'astérisque ou l'étoile *, le signe plus + et le support d'ouverture et de fermeture . Ces caractères spéciaux sont également souvent appelés métacharacteurs.

Voici l'ensemble complet de caractères spéciaux:

^ Début d'une ligne
$ Fin d'une ligne
. Tout caractère (sauf \ n newline)
* 0 ou plus d'expression précédente
| Alternance, soit l'un ou l'autre
[…] Ensemble explicite de caractères à correspondre
+ 1 ou plus d'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
(…) Groupement logique d'une partie d'une expression

La version par défaut de grep n'a qu'un support d'expression régulière limité. Pour que tous les exemples suivants fonctionnent, utilisez faire un coup de pouce à la place ou grep -e.

Pour trouver des lignes en utilisant le | Pour correspondre à l'une ou l'autre expression:

egrep 'xxz | xzz' myfile

Pour trouver des lignes en utilisant | Pour correspondre à l'une ou l'autre expression dans une chaîne également utilise ():

egrep '^ x (yz | yz)' myfile

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

egrep '^ x [yy] z' myfile

Pour trouver des lignes en utilisant [] pour ne faire correspondre aucun caractère:

egrep '^ x [^ yy] z' myfile

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

egrep '^ xy * z' myfile

Pour trouver des lignes en utilisant le + pour correspondre à 1 ou plusieurs de l'expression précédente:

egrep '^ xy + z' myfile

Pour trouver des lignes en utilisant le ? Pour correspondre à 0 ou 1 de l'expression précédente:

Egrep '^ xy?z 'myfile

Exercice III

  1. Trouver toutes les lignes contenant les noms Evans ou Mâle Dans le fichier, les gens.
  2. Trouver toutes les lignes contenant les noms Smith, Smyth ou Smythe Dans le fichier, les gens.
  3. Trouver toutes les lignes contenant les noms Brun, frappe ou Bron Dans le fichier, les gens.Si vous avez le temps:
  4. Trouver la ligne contenant la chaîne (admin), y compris les supports, dans le fichier des gens.
  5. Trouvez la ligne contenant le caractère * dans le fichier des personnes.
  6. Combiner 5 et 6 ci-dessus pour trouver les deux expressions.

Plus d'exemples

Pour trouver des lignes en utilisant . et * pour correspondre à tout ensemble de caractères:

Egrep '^ xy.* z 'myfile

Pour trouver des lignes en utilisant pour correspondre au nombre de caractères:

egrep '^ xy 3 z' myfile
egrep '^ xy 4 z' myfile

Pour trouver des lignes en utilisant pour correspondre à n ou plus de fois:

egrep '^ xy 3, z' myfile

Pour trouver des lignes en utilisant pour correspondre à N fois mais pas plus que m fois:

egrep '^ xy 2,3 z' myfile

Conclusion

Dans ce tutoriel, nous avons d'abord examiné l'utilisation grep dans sa forme simple pour trouver du texte dans un fichier ou dans plusieurs fichiers. Nous avons ensuite combiné le texte à rechercher avec des expressions régulières simples, puis plus complexes en utilisant faire un coup de pouce.

Prochaines étapes

J'espère que vous mettrez les connaissances acquises ici à bon escient. Expérimenter grep Les commandes sur vos propres données et rappelez-vous, les expressions régulières comme décrites ici peuvent être utilisées sous la même forme dans vi, sed et awk!

Solutions d'exercice

Exercice I

Comptez d'abord combien de lignes il y a dans le fichier / etc / passwd.

wc -l / etc / passwd

Maintenant, trouvez toutes les occurrences du texte var Dans le fichier / etc / passwd.

grep var / etc / passwd

Trouvez le nombre 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 de votre connexion dans le / etc / passwd déposer

grep kdm / etc / passwd


Exercice II

Afficher le fichier personnes et examiner son contenu.

chats

Trouver toutes les lignes contenant la chaîne Forgeron dans le fichier personnes.

Les gens grep 'Smith'

Créer un nouveau fichier, npeoples, contenant toutes les lignes commençant par la chaîne Personnel dans le personnes déposer

grep '^ personne personnellement> npeople

Confirmez le contenu du fichier npeoples en répertoriant le fichier.

npeople de chat

Maintenant, ajoutez toutes les lignes où le texte se termine par la chaîne 500 dans le fichier personnes au fichier npeoples.

grep '500 $' personnes >> npeople

Encore une fois, confirmez le contenu du fichier npeoples en répertoriant le fichier.

npeople de chat

Recherchez l'adresse IP du serveur qui est stocké dans le fichier / etc / hôtes.

grep $ (nom d'hôte) / etc / hôtes

Utiliser faire un coup de pouce pour extraire du / etc / passwd Lignes de compte de fichier contenant LP ou votre propre ID utilisateur.

egrep '(lp | kdm :)' / etc / passwd


Exercice III

Trouver toutes les lignes contenant les noms Evans ou Mâle dans le fichier personnes.

Egrep 'Evans | Maler' People

Trouver toutes les lignes contenant les noms Forgeron, Smyth ou Smythe dans le fichier personnes.

egrep 'sm (i | y) le?' personnes

Trouver toutes les lignes contenant les noms Brun, Accélérer ou Bron Dans le fichier, les gens.

Brow Egrep '?e?N 'People

Trouver la ligne contenant la chaîne (admin), y compris les supports, dans le fichier personnes.

$ Egrep '\ (admin \)' People

Trouvez la ligne contenant le personnage * Dans le fichier, les gens.

Egrep '\ *' People

Combiner 5 et 6 ci-dessus pour trouver les deux expressions.

Egrep '\ (admin \) | \ *' People