La commande Linux grep est utilisée comme méthode de filtrage des entrées. GREP signifie Global Regular Expression Printer (imprimante globale d'expressions régulières). Par conséquent, pour pouvoir l'utiliser efficacement, vous devez avoir quelques connaissances sur les expressions régulières.
Dans cet article, vous apprendrez plusieurs exemples qui vous aideront à comprendre la commande grep.
01 sur 09Comment rechercher une chaîne dans un fichier à l'aide de GREP
Imaginez que vous ayez un fichier texte appelé livres avec les titres de livres pour enfants suivants:
- Robin des Bois
- Le petit Chaperon rouge
- Peter Pan
- Boucle d'or et les trois ours
- Blanche Neige Et Les Sept Nains
- Pinnochio
- Le chat dans le chapeau
- Les trois petits cochons
- Le gruffalo
- Charlie et la chocolaterie
Pour trouver tous les livres avec le mot "The" dans le titre, utilisez la syntaxe suivante:
grep Les livresLes résultats suivants seront retournés:
- Boucle d'or et les trois ours
- Blanche Neige Et Les Sept Nains
- Le chat dans le chapeau
- Les trois petits cochons
- Le gruffalo
- Charlie et la chocolaterie
Dans chaque cas, le mot "Le" sera mis en évidence.
La recherche est sensible à la casse, donc si l'un des titres avait "le" au lieu de "Le", il n'aurait pas été renvoyé.
Pour ignorer le cas, vous pouvez ajouter le commutateur suivant:
grep les livres --ignore-caseVous pouvez également utiliser le commutateur -i comme suit:
Continuer la lecture ci-dessous
02 sur 09Rechercher une chaîne dans un fichier à l'aide de caractères génériques
La commande grep est très puissante. Vous pouvez utiliser une multitude de techniques de filtrage pour filtrer les résultats.
Dans cet exemple, je vais vous montrer comment rechercher une chaîne dans un fichier à l'aide de caractères génériques.
Imaginez que vous ayez un fichier appelé lieux avec les noms de lieu écossais suivants:
AberdeenAberystwythaberlourInverurieinvernessNewburghnouveau cerfnouvelle gallowayglasgowEdinbourgSi vous voulez trouver tous les endroits avec invers dans le nom, utilisez la syntaxe suivante:
grep inver * placesLe caractère générique astérisque (*) représente 0 ou plusieurs. Par conséquent, si vous avez un lieu appelé Inver ou Inverness, les deux sont renvoyés.
Un autre caractère générique que vous pouvez utiliser est le point (.). Vous pouvez l'utiliser pour faire correspondre une seule lettre.
grep inver.r placesLa commande ci-dessus trouverait des endroits appelés invertissement et invariable mais ne trouverait pas invérerie, car il ne peut y avoir qu'un seul caractère générique entre les deux r, comme indiqué par la période unique.
Le caractère générique de période est utile, mais il peut poser problème si vous en avez un dans le texte que vous recherchez.
Par exemple, regardez cette liste de noms de domaine
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- dailylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
Pour trouver tout ce qui concerne les .com, vous pouvez simplement utiliser la syntaxe suivante:
grep * about * noms de domaineLa commande ci-dessus tomberait si la liste contenait le nom suivant:
- everydaylinuxuser.com/about.html
Vous pouvez donc essayer la syntaxe suivante:
noms de domaine grep * about.comCela fonctionnerait bien sauf s'il y avait un domaine avec le nom suivant:
à propos de ycom.comPour vraiment rechercher le terme about.com, vous devez échapper au point de la manière suivante:
grep * about .com noms de domaineLe dernier joker à vous montrer est le point d’interrogation qui représente zéro ou un caractère.
Par exemple:
noms de lieux vertsLa commande ci-dessus renverrait Aberdeen, Aberystwyth ou même Berwick.
Continuer la lecture ci-dessous
03 sur 09Rechercher des chaînes au début et à la fin de la ligne à l'aide de grep
Les symboles carat (^) et dollar ($) vous permettent de rechercher des motifs au début et à la fin des lignes.
Imaginez que vous avez un fichier appelé football avec les noms d’équipe suivants:
- Blackpool
- Liverpool
- Manchester City
- La ville de Leicester
- Manchester United
- Newcastle United
- FC United Of Manchester
Si vous voulez trouver toutes les équipes qui ont commencé avec Manchester, utilisez la syntaxe suivante:
grep ^ équipes de ManchesterLa commande ci-dessus renverrait Manchester City et Manchester United mais pas le FC United Of Manchester.
Sinon, vous pouvez trouver toutes les équipes se terminant par United en utilisant la syntaxe suivante:
grep United $ équipesLa commande ci-dessus serait renvoyée à Manchester United et Newcastle United mais pas au FC United Of Manchester.
04 de 09Compter le nombre de correspondances à l'aide de grep
Si vous ne souhaitez pas renvoyer les lignes qui correspondent à un modèle à l'aide de grep mais que vous voulez simplement savoir combien il en existe, vous pouvez utiliser la syntaxe suivante:
grep -c pattern inputfileSi le motif était apparié deux fois, le nombre 2 serait renvoyé.
Continuer la lecture ci-dessous
05 de 09Trouver tous les termes qui ne correspondent pas en utilisant grep
Imaginez que vous ayez une liste de noms de lieux avec les pays énumérés comme suit:
- Aberdeen Ecosse
- Glasgow Ecosse
- Liverpool Angleterre
- Colwyn Bay
- Londres, Angleterre
Vous avez peut-être remarqué que colwyn bay n'est associé à aucun pays.
Pour rechercher tous les lieux d'un pays, vous pouvez utiliser la syntaxe suivante:
grep land $ placesLes résultats obtenus seraient tous les lieux sauf pour Colwyn Bay.
Cela ne fonctionne évidemment que pour les endroits qui se terminent par des terres (à peine scientifiques).
Vous pouvez inverser la sélection en utilisant la syntaxe suivante:
grep -v land $ placesCela permettrait de trouver tous les endroits qui ne se terminent pas par des terres.
06 de 09Comment faire pour rechercher des lignes vides dans des fichiers à l'aide de grep
Imaginez que vous ayez un fichier d'entrée utilisé par une application tierce qui arrête de lire le fichier lorsqu'il trouve une ligne vide, comme suit:
- Aberdeen Ecosse
- inverness ecosse
- Liverpool Angleterre
- colwyn bay wales
Lorsque l'application arrive sur la ligne après liverpool, la lecture s'arrête, ce qui signifie que colwyn bay est complètement ratée.
Vous pouvez utiliser grep pour rechercher des lignes vierges avec la syntaxe suivante:
grep ^ $ placesMalheureusement, ce n'est pas particulièrement utile car il ne fait que renvoyer les lignes vides.
Vous pouvez bien sûr obtenir un décompte du nombre de lignes vides afin de vérifier si le fichier est valide comme suit:
grep -c ^ $ placesToutefois, il serait plus utile de connaître les numéros de ligne qui ont une ligne vide afin de pouvoir les remplacer. Vous pouvez le faire avec la commande suivante:
grep -n ^ $ placesContinuer la lecture ci-dessous
07 de 09Comment rechercher des chaînes de caractères majuscules ou minuscules à l'aide de grep
En utilisant grep, vous pouvez déterminer quelles lignes d'un fichier ont des caractères majuscules en utilisant la syntaxe suivante:
grep 'A-Z' nom du fichierLes crochets vous permettent de déterminer la plage de caractères. Dans l'exemple ci-dessus, il correspond à tout caractère compris entre A et Z.
Par conséquent, pour faire correspondre les caractères minuscules, vous pouvez utiliser la syntaxe suivante:
grep 'a-z' nomfichierSi vous souhaitez faire correspondre uniquement des lettres et non des chiffres ou d'autres symboles, vous pouvez utiliser la syntaxe suivante:
grep 'a-zA-Z' nom de fichierVous pouvez faire la même chose avec les nombres comme suit:
grep '0-9' nomfichier 08 de 09Recherche de motifs répétés à l'aide de grep
Vous pouvez utiliser des accolades {} pour rechercher un motif répétitif.
Imaginez que vous ayez un fichier avec les numéros de téléphone suivants:
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
Vous savez que la première partie du numéro doit comporter trois chiffres et vous souhaitez rechercher les lignes qui ne correspondent pas à ce modèle.
Dans l'exemple précédent, vous savez que 0-9 renvoie tous les nombres d'un fichier.
Dans ce cas, nous voulons les lignes qui commencent par trois nombres suivis d'un trait d'union (-). Vous pouvez le faire avec la syntaxe suivante:
grep "^ 0-9 0-9 0-9 -" nombresComme nous l'avons vu dans les exemples précédents, carat (^) signifie que la ligne doit commencer par le motif suivant.
Le 0-9 recherchera tout nombre compris entre 0 et 9. Comme il est inclus trois fois, il correspond à 3 chiffres. Enfin, un trait d'union indique qu'un trait d'union doit succéder aux trois nombres.
En utilisant les accolades, vous pouvez rendre la recherche plus petite comme suit:
grep "^ 0-9 {3 } -" nombresLa barre oblique échappe au {crochet de manière à ce qu’elle fasse partie de l’expression régulière, mais en substance, elle indique 0-9 {3}, ce qui signifie un nombre compris entre 0 et 9 à trois reprises.
Les accolades peuvent également être utilisées comme suit:
{5,10}{5,}Le {5,10} signifie que le caractère recherché doit être répété au moins 5 fois mais pas plus de 10 alors que le {5,} signifie que le caractère doit être répété au moins 5 fois, mais il peut être plus que cela.
Continuer la lecture ci-dessous
09 de 09Utiliser la sortie d'autres commandes en utilisant grep
Jusqu'ici, nous avons examiné la correspondance de modèles dans des fichiers individuels, mais grep peut utiliser la sortie d'autres commandes comme entrée pour la correspondance de modèles.
Un bon exemple consiste à utiliser la commande ps qui répertorie les processus actifs.
Par exemple, exécutez la commande suivante:
ps -efTous les processus en cours sur votre système seront affichés.
Vous pouvez utiliser grep pour rechercher un processus particulier en cours d'exécution comme suit:
ps -ef | grep firefoxRésumé
La commande grep est une commande Linux fondamentale qui vaut la peine d’être apprise, car elle vous facilitera grandement la vie lors de la recherche de fichiers et de processus lors de l’utilisation du terminal.