grep

30 exemples de grep

30 exemples de grep
Vous pouvez trouver grep présent au plus profond du cerveau animal des systèmes d'exploitation Unix et de type Unix. C'est un programme de base utilisé pour la correspondance de motifs et il a été écrit dans les années 70 avec le reste de l'outil UNIX que nous connaissons et aimons (ou détestons).

Bien que l'apprentissage des langages formels et des expressions régulières soit un sujet passionnant. Apprendre grep a beaucoup plus à faire que les regex. Pour commencer et voir la beauté et l'élégance de grep, vous devez d'abord voir quelques exemples du monde réel.

Des exemples qui sont pratiques et qui vous facilitent un peu la vie. Voici 30 de ces cas d'utilisation et options courants de grep.

1. ps aux | grep

Le ps aux liste tous les processus et leurs pid associés. Mais souvent cette liste est trop longue pour qu'un humain puisse l'inspecter. En redirigeant la sortie vers une commande grep, vous pouvez répertorier les processus en cours d'exécution avec une application très spécifique à l'esprit. Par exemple le peut être sshd ou nginx ou httpd.

# ps aux | grep sshd
racine    400  0.0  0.2  69944  5624 ?       Ss   17:47   0:00 /usr/sbin/sshd -D
racine   1076  0.2  0.3  95204  6816 ?       Ss   18:29   0:00 sshd : root@pts/0
racine   1093  0.0  0.0  12784  932 pts/0    S+   18:29   0:00 grep sshd

2. Saisir vos adresses IP

Dans la plupart des systèmes d'exploitation, vous pouvez répertorier toutes vos interfaces réseau et l'adresse IP qui est attribuée à cette interface en utilisant la commande ifconfig ou ip addr. Ces deux commandes afficheront beaucoup d'informations supplémentaires. Mais si vous souhaitez imprimer uniquement l'adresse IP (par exemple pour les scripts shell), vous pouvez utiliser la commande ci-dessous :

$ adresse ip | grep inet | awk ' print $2; '
$ adresse ip | grep-vinet | awk ' print $2; ' #Pour les lignes avec juste inet pas inet6 (IPv6)

La commande ip addr obtient tous les détails (y compris les adresses IP), elle est ensuite redirigée vers la deuxième commande grep inet qui ne sort que les lignes contenant inet. Ceci est ensuite redirigé vers awk print l'instruction qui imprime le deuxième mot de chaque ligne (pour le dire simplement).

P.S : Vous pouvez aussi le faire sans grep si vous savez très bien.

3. Examiner les tentatives échouées de SSH

Si vous avez un serveur Internet, avec une adresse IP publique, il sera constamment bombardé de tentatives SSH et si vous autorisez les utilisateurs à avoir un accès SSH basé sur un mot de passe (une politique que je ne recommanderais pas), vous pouvez voir toutes ces tentatives infructueuses en utilisant le commande grep suivante :

# cat /var/log/auth.journal | grep « Echec »
Échantillon mis
5 décembre 16:20:03 debian sshd[509]:Échec du mot de passe pour root à partir de 192.168.0.100 ports 52374 ssh2
5 décembre 16:20:07 debian sshd[509]:Échec du mot de passe pour root à partir de 192.168.0.100 ports 52374 ssh2
5 décembre 16:20:11 debian sshd[509]:Échec du mot de passe pour root à partir de 192.168.0.100 ports 52374 ssh2

4. Raccorder Grep à Uniq

Parfois, grep produira beaucoup d'informations. Dans l'exemple ci-dessus, une seule adresse IP a peut-être tenté d'entrer dans votre système. Dans la plupart des cas, il n'y a qu'une poignée d'adresses IP incriminées que vous devez identifier et mettre sur liste noire de manière unique.

# cat /var/log/auth.journal | grep "Échec" | uniq -f 3

La commande uniq est censée n'imprimer que les lignes uniques. Uniq -f 3 saute les trois premiers champs (pour ignorer les horodatages qui ne sont jamais répétés) puis commence à rechercher des lignes uniques.

5. A la recherche de messages d'erreur

L'utilisation de Grep pour les journaux d'accès et d'erreurs n'est pas limitée à SSH uniquement. Les serveurs Web (comme Nginx) enregistrent les erreurs et les journaux d'accès assez méticuleusement. Si vous configurez des scripts de surveillance qui vous envoient des alertes lorsque grep " 404 " renvoie une nouvelle valeur. ça peut être bien utile.

# grep -w "404" /var/www/nginx/access.Journal
192.168.0.100 - - [06/Dec/2018:02:20:29 +0530] "GET /favicon.ic HTTP/1.1" 404 200
"http://192.168.0.102/" "Mozilla/5.0 (Windows NT10.0 ; Win64 ; x64)
AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/70.0.3538.110 Safari/537.36"
192.168.0.101 - - [06/Dec/2018:02:45:16 +0530] "GET /favicon.ic HTTP/1.1" 404 143
"http://192.168.0.102/" "Mozilla/5.0 (iPad ; CPU OS 12_1 comme Mac OS X)
AppleWebKit/605.1.15 (KHTML, comme Gecko) Version/12.0 Mobile/15E148 Safari/604.1"

L'expression régulière peut ne pas être "404", mais un autre filtrage d'expression régulière pour uniquement les clients mobiles ou uniquement les appareils Apple affichant une page Web. Cela vous permet d'avoir un aperçu plus approfondi des performances de votre application.

6. Liste des colis

Pour les systèmes basés sur Debian, dpkg -l répertorie tous les paquets installés sur votre système. Vous pouvez le diriger dans une commande grep pour rechercher des packages appartenant à une application spécifique. Par example:

# dpkg -l | grep "vim"

7. grep -v noms de fichiers

Pour lister toutes les lignes qui ne pas contiennent un motif donné, utilisez le drapeau -v. C'est fondamentalement l'opposé d'une commande grep régulière.

8. grep -l

Il répertorie tous les fichiers qui contiennent au moins une occurrence du modèle fourni. Ceci est utile lorsque vous recherchez un modèle dans un répertoire avec plusieurs fichiers. Il n'imprime que le nom du fichier, et non la ligne spécifique avec le motif.

9. Option mot unique -w

$ grep -w noms de fichiers

L'indicateur -w indique à grep de rechercher le motif donné en tant que mot entier et pas seulement une sous-chaîne d'une ligne. Par exemple, plus tôt, nous avons recherché l'adresse IP et le modèle inet imprimé les lignes avec les deux inet et inet6 répertoriant les adresses IPv4 et IPv6. Mais si nous utilisions -w marquer uniquement les lignes avec inet car un mot précédé et suivi d'espaces blancs est une correspondance valide.

dix. Expression régulière étendue

Vous constaterez souvent que les expressions régulières natives de Grep sont un peu limitatives. Dans la plupart des scripts et des instructions, vous trouverez l'utilisation du drapeau -E et cela vous permettra d'entrer un motif dans ce qu'on appelle le mode étendu.

Voici les commandes grep et grep -E pour rechercher les mots Superman et Spiderman.

$ grep "\(Super|Spider\)man" texte
$ grep -E "(Super|Spider)man" texte

Comme vous pouvez le voir, la version étendue est beaucoup plus facile à lire.

11. Grep pour vos conteneurs

Si vous avez un grand groupe de conteneurs en cours d'exécution sur votre hôte, vous pouvez les récupérer par nom d'image, statut, ports qu'ils exposent et de nombreux autres attributs. Par example,

$ docker ps | grep [nom de l'image]

12. Grep pour vos pods

Alors que nous sommes sur le sujet des conteneurs. Kubernetes a souvent tendance à lancer plusieurs pods dans le cadre d'un déploiement donné. Bien que chaque pod ait un nom unique, dans un espace de noms donné, ils commencent par le nom du déploiement, généralement. Nous pouvons le saisir et répertorier tous les pods associés à un déploiement donné.

$ kubectl obtenir des gousses | grep

13. Grep pour le Big data

Souvent, l'analyse dite « Big Data » implique une recherche, un tri et un comptage simples de modèles dans un ensemble de données donné. Les utilitaires UNIX de bas niveau comme grep, uniq, wc sont particulièrement efficaces pour cela. Cette article de blog montre un bel exemple d'une tâche accomplie en quelques secondes à l'aide de grep et d'autres utilitaires Unix tandis que Hadoop a pris près d'une demi-heure.

Par exemple, ce base de données a plus de 1.7 Go de taille. Il contient des informations sur une multitude de parties d'échecs, y compris les mouvements effectués, qui a gagné, etc. Nous ne sommes intéressés que par les résultats, nous exécutons donc la commande suivante :

$ grep "Résultat" millionbase-2.22.pgn | trier | uniq -c
221 [Résultat "*"]
653728 [Résultat "0-1"]
852305 [Résultat "1-0"]
690934 [Résultat "1/2-1/2"]

Cela a pris environ 15 secondes sur un processeur 2 cœurs/4 fils de 4 ans. Donc, la prochaine fois que vous résolvez un problème de « big data ». Pensez si vous pouvez utiliser grep à la place.

14. grep -color=auto

Cette option permet à grep de mettre en évidence le motif à l'intérieur de la ligne où il a été trouvé.

15. grep -i

La correspondance de modèle Grep est intrinsèquement sensible à la casse. Mais si vous ne vous en souciez pas, l'utilisation de l'indicateur -i rendra grep insensible à la casse.

16. grep -n

L'indicateur -n affichera les numéros de ligne afin que vous n'ayez pas à vous soucier de trouver la même ligne plus tard.

17. git grep

Git, le système de contrôle de version, possède lui-même une commande grep intégrée qui fonctionne à peu près comme votre grep habituel. Mais il peut être utilisé pour rechercher des modèles sur n'importe quel arbre validé à l'aide de l'interface de ligne de commande git native, au lieu de tuyaux fastidieux. Par exemple, si vous êtes dans la branche principale de votre référentiel, vous pouvez parcourir le référentiel en utilisant :

(maître) $ git grep

18. grep -o

L'indicateur -o est vraiment utile lorsque vous essayez de déboguer une regex. Il n'imprimera que la partie correspondante de la ligne, au lieu de la ligne entière. Donc, au cas où vous obtenez trop de lignes indésirables pour un modèle fourni, et vous ne pouvez pas comprendre pourquoi cela se produit. Vous pouvez utiliser l'indicateur -o pour imprimer la sous-chaîne incriminée et expliquer votre regex à l'envers à partir de là.

19. grep -x

L'indicateur -x imprimerait une ligne, si et seulement si, la ligne entière correspond à votre regex fournie. Ceci est quelque peu similaire à l'indicateur -w qui imprimait une ligne si et seulement un mot entier correspondait à l'expression régulière fournie.

20. grep -T

Lorsque vous traitez des journaux et des sorties à partir d'un script shell, vous êtes plus que susceptible de rencontrer des onglets durs pour différencier les différentes colonnes de sortie. L'indicateur -T alignera soigneusement ces onglets afin que les colonnes soient soigneusement organisées, rendant la sortie lisible par l'homme.

21. grep -q

Cela supprime la sortie et exécute silencieusement la commande grep. Très utile lors du remplacement de texte ou de l'exécution de grep dans un script démon.

22. grep -P

Les personnes habituées à la syntaxe des expressions régulières perl peuvent utiliser le drapeau -P pour utiliser exactement cela. Vous n'avez pas besoin d'apprendre les expressions régulières de base, que grep utilise par défaut.

23. grep -D [ACTION]

Sous Unix, presque tout peut être traité comme un fichier. Par conséquent, n'importe quel périphérique, socket ou flux de données FIFO peut être envoyé à grep. Vous pouvez utiliser le drapeau -D suivi d'une ACTION (l'action par défaut est LIRE). Quelques autres options sont SKIP pour ignorer silencieusement des périphériques spécifiques et RECURSE pour parcourir de manière récursive les répertoires et les liens symboliques.

24. Répétition

Si vous recherchez un motif donné qui est une répétition d'un motif plus simple connu, utilisez des accolades pour indiquer le nombre de répétitions

$ grep -E "[0-9]10"

Ceci imprime des lignes contenant des chaînes de 10 chiffres ou plus de long.

25. Raccourcis de répétition

Certains caractères spéciaux sont réservés à un type spécifique de répétition de motif. Vous pouvez les utiliser à la place des accolades, si elles correspondent à vos besoins.

? : Le motif précédant le point d'interrogation doit correspondre à zéro ou une fois.

* : Le motif précédant l'étoile doit correspondre à zéro ou plusieurs fois.

+ : Le motif précédant le plus doit correspondre une ou plusieurs fois.

25. Décalages d'octets

Si vous voulez savoir voir le décalage d'octet des lignes où se trouve l'expression correspondante, vous pouvez également utiliser l'indicateur -b pour imprimer les décalages. Pour imprimer le décalage de la partie correspondante d'une ligne, vous pouvez utiliser l'indicateur -b avec l'indicateur -o.

$ grep -b -o [nom de fichier]

Offset signifie simplement, après combien d'octets depuis le début du fichier la chaîne correspondante commence-t-elle.

26. egrep, fgrep et rgerp

Vous verrez souvent l'invocation de egrep, pour utiliser la syntaxe d'expression régulière étendue dont nous avons parlé plus tôt. Cependant, il s'agit d'une syntaxe déconseillée et il est recommandé d'éviter d'utiliser cette. Utilisez plutôt grep -E. De même, utilisez grep -F au lieu de fgrep et grep -r au lieu de rgrep.

27. grep -z

Parfois, l'entrée de grep n'est pas constituée de lignes se terminant par un caractère de nouvelle ligne. Par exemple, si vous traitez une liste de noms de fichiers, ils peuvent provenir de différentes sources. L'indicateur -z indique à grep de traiter le caractère NULL comme fin de ligne. Cela vous permet de traiter le flux entrant comme n'importe quel fichier texte normal.

28. grep -a [nom de fichier]

L'indicateur -a indique à grep de traiter le fichier fourni comme s'il s'agissait de texte normal. Le fichier pourrait être un binaire, mais grep traitera le contenu à l'intérieur, comme s'il s'agissait de texte.

29. grep -U [nom de fichier]

L'indicateur -U indique à grep de traiter les fichiers fournis comme s'il s'agissait de fichiers binaires et non de texte. Par défaut, grep devine le type de fichier en regardant les premiers octets. L'utilisation de ce drapeau annule le travail de devinette.

30. grep -m NUM

Avec des fichiers volumineux, la recherche d'une expression peut prendre une éternité. Cependant, si vous souhaitez vérifier uniquement les NUM premiers nombres de correspondances, vous pouvez utiliser l'indicateur -m pour accomplir cela. C'est plus rapide et le rendement est souvent gérable aussi.

Conclusion

Une grande partie du travail quotidien d'un administrateur système consiste à passer au crible de grandes bandes de texte. Il peut s'agir de journaux de sécurité, de journaux de votre serveur Web ou de messagerie, de l'activité des utilisateurs ou même du texte volumineux des pages de manuel. Grep vous offre un peu plus de flexibilité dans le traitement de ces cas d'utilisation.

Espérons que les quelques exemples et cas d'utilisation ci-dessus vous ont aidé à mieux comprendre ce fossile vivant d'un logiciel.

Meilleurs jeux de laboratoire d'applications Oculus
Si vous êtes propriétaire d'un casque Oculus, vous devez être au courant du chargement latéral. Le chargement latéral est le processus d'installation ...
Top 10 des jeux à jouer sur Ubuntu
La plate-forme Windows a été l'une des plates-formes dominantes pour les jeux en raison du pourcentage énorme de jeux qui se développent aujourd'hui p...
5 meilleurs jeux d'arcade pour Linux
De nos jours, les ordinateurs sont des machines sérieuses utilisées pour les jeux. Si vous ne pouvez pas obtenir le nouveau score élevé, vous saurez c...