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 myfilexyz
Recherche simple
Pour trouver le texte «xyz» dans le fichier, exécutez ce qui suit:
grep xyz myfilexyz
Options
Options courantes utilisées avec le grep La commande comprend:
Par exemple:
grep -i xyz myfilexyz
# trouver du texte, quel que soit le cas
grep -ic xyz myfile7
# compter les lignes avec du texte
grep -in xyz myfile1: xyz
# 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> myfile1xyz
chat myfile1
echo -e 'xyz \ nxzz \ nxyz'> myfile2xyz
chat myfile2
echo -e 'xxx \ nyyy'> myfile3xxx
chat myfile3
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 myfile3Myfile: 7
# correspondre aux noms de fichiers commençant par «mon»MyFile: 1: XYZ
grep -in xyz mon *
Exercice I
Astuce: utilisez wc -l / 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:
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
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
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