Avez-vous déjà utilisé grep? La plupart du temps, l'astuce de base de grep peut faire la plupart du travail. Cependant, grep offre de nombreuses façons d'effectuer la recherche et d'affiner la sortie vers une version plus utilisable. Dans cet article, examinons l'utilisation de la commande grep.
Utilisation de Grep
Vérification de l'existence
Si vous utilisez n'importe quelle sorte de distribution Linux, alors vous avez déjà installé grep. Exécutez la commande suivante dans le terminal.
grep --version
Cette commande est utilisée pour afficher la version de grep actuellement installé. Maintenant, nous avons besoin d'un fichier de démonstration. Dans mon cas, je vais générer un fichier texte qui inclut tous les packages installés sur mon système.
Notions de base
L'utilisation de base de grep suit la structure suivante.
grepOu, pour une meilleure compréhension, utilisez celui-ci.
grepDans ce cas, grep effectuera une recherche dans le fichier et imprimera toutes les lignes qui incluent le motif (terme de recherche).
grep python ~/Desktop/PackageList.SMS
Grep a recherché le fichier « PackageList.txt" j'ai généré plus tôt et imprimé toutes les lignes qui incluent "python".
Cette même opération peut être effectuée d'une autre manière. Découvrez l'exemple suivant.
chat ~/Desktop/PackageList.txt | python grep
Ici, en utilisant la commande "cat", j'ai envoyé le contenu du fichier "PackageList.txt" à grep. En utilisant la sortie de cat, grep a effectué la recherche et imprimé les lignes contenant le terme de recherche.
Maintenant vient une chose amusante. Vous pouvez littéralement empiler plusieurs commandes grep comme ça.
chat ~/Desktop/PackageList.txt | grep - | grep p | python grep
Le premier grep filtre jusqu'aux lignes avec un trait d'union, le second filtre jusqu'aux lignes avec p et le dernier grep filtre jusqu'aux lignes avec python. logique?
Sensibilité à la casse
Lors d'une recherche, la sensibilité à la casse est une question majeure. Par défaut, grep est sensible à la casse.
Par exemple, la recherche de "Python" n'affichera aucun résultat.
chat ~/Desktop/PackageList.txt | grep Python
Pour rendre grep "insensible à la casse", ajoutez l'option suivante.
chat ~/Desktop/PackageList.txt | grep -i Python
Recherche de fichier
Disons que vous avez un répertoire avec de nombreux fichiers texte. Votre objectif est d'identifier le(s) fichier(s) contenant ou non un motif (terme de recherche).
Je trouve cette méthode très utile lors de la recherche dans une pile de fichiers journaux. Comme je n'ai pas le temps d'ouvrir et de vérifier chaque fichier manuellement, je dois faire le travail à ma place.
Pour lister les fichiers contenant la correspondance, utilisez le drapeau "-l".
grep -l
Comme le résultat le suggère, le terme « python » est présent dans les 3 fichiers présents dans le répertoire « Desktop ».
Pour lister les fichiers sans aucune correspondance, utilisez le drapeau "-L".
grep -L
"Aucune concordance.txt" est le seul fichier qui ne contient pas le terme "python".
Recherche inversée
Le comportement par défaut de grep est d'imprimer uniquement les lignes avec le motif correspondant, à droite? Il est temps d'inverser le processus. Cette fois, nous imprimerons uniquement les lignes SANS le motif correspondant.
Il suffit de passer l'option "-v" à grep.
chat ~/Desktop/PackageList.txt | grep -i -v Python
Impression des lignes avant/après le match
Par défaut, grep n'imprimera que la ligne qui correspond au modèle de recherche. En utilisant cette technique, vous pouvez également dire à grep d'imprimer des lignes avant/après le match.
Pour imprimer les lignes avant le match, utilisez la structure suivante.
grep -B
Ici, 5 est la ligne de nombre que grep imprimera AVANT la ligne correspondante.
Pour imprimer les lignes après le match, utilisez la suivante.
grep -A
Que diriez-vous d'imprimer à la fois avant et après la ligne correspondante? Dans ce cas, utilisez le drapeau "-C".
grep -C
Numéro de ligne
Lorsque grep affiche la sortie, il ne mentionne pas le numéro de ligne. Pour le(s) numéro(s) de ligne associé(s), utilisez l'indicateur "-n".
grep -n
Un seul mot
Si le drapeau "-w" est utilisé, grep traitera le motif comme un mot entier.
grep -w
Limitation de la recherche grep
Grep permet de spécifier le nombre de lignes à rechercher dans le fichier. Cette méthode est utile si vous avez affaire à un gros fichier (comme le journal système). Utilisez le drapeau "-m".
grep -m
Recherche récursive
C'est l'une des fonctionnalités les plus utiles offertes par grep pour une utilisation intensive. Grep peut rechercher récursivement un répertoire et trouver toutes les correspondances de tous les fichiers auxquels il est confronté.
grep -ROu alors,
grep -r
Je trouve souvent que j'utilise cette fonction récursive avec l'indicateur "-l".
Mode silencieux
Grep peut être exécuté en mode « silencieux ». Lors de l'exécution en mode "silencieux", grep n'imprimera aucune sortie sur le terminal. Au lieu de cela, il renverra 0 (au moins, une correspondance a été trouvée) ou 1 (aucune correspondance trouvée).
grep -qécho $?
Regex
Grep permet également les recherches regex (expression régulière). Cela ajoute un tout nouveau niveau de complexité et de facilité d'utilisation de grep en tant qu'outil de recherche.
Par exemple, vous pouvez utiliser des crochets pour rechercher à la fois « trop » et « deux » en même temps.
chat ~/Bureau/gpl-3.0.txt | grep deux
Cet exemple suivant n'imprimera la ligne que si la correspondance se produit au tout début de la ligne.
grep ^GNU ~/Desktop/gpl-3.0.SMS
Quant à faire correspondre la fin, utilisez celle-ci.
vous grep$ ~/Bureau/gpl-3.0.SMS
Si vous souhaitez utiliser Perl regex, utilisez le drapeau "-P". Il traitera le motif comme une regex Perl.
grep -PDernières pensées
Grep offre des tonnes de façons de personnaliser la fonction de recherche. La disponibilité de regex ouvre un tout nouvel horizon pour l'utilisation potentielle de grep. Ce qui est cool, c'est que vous pouvez utiliser à la fois les regex générales et Perl ; celui avec lequel vous vous sentez à l'aise.
Pour l'explication la plus détaillée, consultez toujours la page de manuel.
homme grep
Acclamations!