L'une des opérations les plus couramment utilisées dans le terminal Linux consiste à rechercher dans les fichiers texte et à filtrer les sorties standard ou les flux d'erreurs. Linux fournit un excellent outil qui nous permet de résoudre cette tâche facilement - grep. Dans cet article, nous couvrirons les cas d'utilisation les plus courants de grep, ce qui simplifiera définitivement votre routine quotidienne.
Qu'est-ce que grep
Grep signifie Global Regular Expression Print. C'est un utilitaire très pratique lorsqu'il s'agit de rechercher dans un grand nombre de fichiers texte (journaux, par exemple).
Grep est la commande la plus utile sous Linux/Unix pour les administrateurs système, les développeurs et les ingénieurs DevOps. L'objectif principal de cet outil est de rechercher des chaînes ou des modèles dans un fichier spécifié, ou de filtrer la sortie d'autres commandes.
Ce modèle que nous avons mentionné ci-dessus est connu sous le nom d'expression régulière.
La commande grep affiche une ligne sur le terminal avec la chaîne si elle trouve une correspondance avec la requête de recherche.
Il existe de nombreux exemples d'utilisation de grep, alors voyons comment et quand vous pouvez l'utiliser.
Installation de grep sous Linux
Habituellement, grep est installé dans la plupart des systèmes Linux et même dans les petits conteneurs Docker. Mais si vous ne l'avez pas installé sur votre système, vous pouvez le faire en utilisant la commande suivante, par exemple :
apt-get updateapt-get install -y grep
exemples d'utilisation de grep
Dans cette partie de l'article, nous couvrirons les exemples les plus courants d'utilisation de grep.
Filtrer une sortie de commande
Vous pouvez utiliser la commande grep pour rechercher et imprimer n'importe quelle ligne à partir de n'importe quelle sortie de commande Linux qui correspond au modèle spécifié.
Dans cet exemple, nous allons vérifier quels packages Python 3 avons-nous dans notre système Ubuntu :
dpkg -l | grep python3
Dans cet exemple :
dpkg -l
imprimera tous les packages installésgrep
filtreradpkg
sortie et impression uniquement des chaînes, qui contiennentpython3
chaîne
De la même manière, vous pouvez afficher les informations sur le modèle de CPU, par exemple :
grep -i 'Model' /proc/cpuinfo
Rechercher une chaîne dans un fichier
Dans cet exemple, la commande grep recherchera la chaîne "root" dans le fichier "/etc/passwd" et l'affichera si la chaîne a été trouvée.
En règle générale, nous utilisons cette commande pour vérifier si le système dispose d'un compte d'utilisateur avec un nom spécifié (exemple root in out) :
grep root /etc/passwd
Rechercher dans plusieurs fichiers
Pour trouver la chaîne dans plusieurs fichiers à la fois, utilisez la commande grep et spécifiez les noms de fichiers sur une seule ligne. Vous pouvez utiliser des expressions régulières pour rechercher dans les fichiers par masque.
Téléchargeons Apache access.log accessible au public :
mkdir -p /var/log/httpd
cd /var/log/httpd
wget http://www.almhuette-raith.at/apache-log/access.log
Maintenant, divisons ce fichier en plusieurs fichiers par 10 000 lignes dans le fichier :
Maintenant, nous pouvons rechercher dans les fichiers l'erreur de serveur HTTP 500 :
grep ' 500 ' xac xad
Pour rechercher dans tous les fichiers du répertoire de travail actuel, utilisez *
après le motif.
Dans l'exemple ci-dessous, la commande grep recherchera 500 erreurs de serveur dans tous les fichiers :
grep ' 500 ' *
Recherche par mot entier
Avec le -w
dans la commande grep, vous pouvez rechercher les fichiers contenant un modèle de mot :
grep -w 'Windows XP' *
Recherche insensible à la casse
La commande grep est suffisamment intelligente pour nous permettre d'effectuer une recherche quelle que soit la sensibilité à la casse du modèle de recherche.
Pour ce faire, nous devons utiliser -i
comme argument.
Voici le même exemple, mais maintenant nous effectuons un filtrage insensible à la casse :
grep -i -w 'windows xp' *
Fichiers de sortie contenant le motif de recherche
Vous pouvez utiliser -l
option pour afficher tous les noms de fichiers contenant le motif recherché :
grep -l -i -w 'windows xp' *
Compter les correspondances par fichier
Si vous voulez connaître le nombre de fois que votre modèle correspond dans tous les fichiers, ajoutez le -c
choix :
grep -c -i -w 'windows xp' *
Nombre de lignes avant le motif recherché
Pour afficher les lignes d'un fichier avant le motif de recherche, ajoutez -B
argument suivi du nombre de nombres que vous souhaitez récupérer dans le fichier :
grep -B 3 -i -w 'windows xp' xaf
Nombre de lignes après le motif recherché
De même, vous pouvez utiliser -A
argument pour spécifier le nombre de lignes à imprimer après le motif recherché :
grep -A 3 -i -w 'windows xp' xaf
Imprimer le numéro de ligne pour la correspondance du modèle de recherche
Pour afficher le numéro de ligne du motif recherché trouvé, vous pouvez utiliser -n
argument :
grep -n -i -w 'windows xp' xaf
Reconnaître le début de la chaîne
Dans l'exemple suivant, nous utiliserons la commande grep pour rechercher toutes les requêtes provenant de l'adresse IP spécifique.
Toutes les lignes recherchées doivent commencer par le 5.34.180.192
terme.
grep "^5.34.180.192" xaf
Reconnaître la fin de la chaîne
Ajouter $
à la fin du motif pour trouver les lignes se terminant par la chaîne recherchée :
grep "Chrome/62\" \"-\"$" xaf
Dès que notre chaîne de recherche contient "
symboles, nous les échappons avec le \
.
Recherche de motifs multiples
Nous pouvons utiliser grep pour rechercher plusieurs modèles à la fois. Ajouter -e
argument avant chaque motif de recherche :
grep -e "Chrome/62\" \"-\"$" -e "15/Mar/2021:08:35:23" xaf
Ici, nous recherchons toutes les chaînes du fichier qui se terminent par Chrome/62" "-"
ET contenir une date et une heure spécifiques 15/Mar/2021:08:35:23
.
Changer la couleur de sortie
Comme la sortie colorée augmente la lisibilité, vous pouvez la changer pour votre couleur préférée en définissant GREP_COLOR
variable d'environnement :
GREP_COLOR='1;35' grep --color=always 'admin' /etc/passwd
Vous pouvez obtenir plus d'informations sur la variable GREP_COLOR dans la documentation officielle de grep.
Résumé
La commande grep est extrêmement utile lorsqu'il s'agit de filtrer le contenu des fichiers texte ou le résultat de la sortie des commandes. Dans cet article, nous avons couvert les commandes grep les plus couramment utilisées, ce qui simplifiera votre expérience shell.
Nous espérons que cet article vous a été utile. Si oui, s'il vous plaît, aidez-nous à le diffuser dans le monde.