Recherche de site Web

Comment utiliser la commande Grep sous Linux [12 exemples utiles]


Avez-vous déjà été confronté à la tâche de rechercher une chaîne ou un modèle particulier dans un fichier, mais vous ne savez pas par où commencer ? Eh bien, voici la commande grep à la rescousse !

grep est un puissant outil de recherche de modèles de fichiers fourni avec chaque distribution de Linux. Si, pour une raison quelconque, il n'est pas installé sur votre système, vous pouvez facilement l'installer via votre gestionnaire de packages comme indiqué.

sudo apt install grep         [On Debian, Ubuntu and Mint]
sudo yum install grep         [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep  [On Gentoo Linux]
sudo apk add grep             [On Alpine Linux]
sudo pacman -S grep           [On Arch Linux]
sudo zypper install grep      [On OpenSUSE]    

J'ai découvert que le moyen le plus simple de vous familiariser avec la commande grep est de simplement vous lancer et d'utiliser quelques exemples concrets.

1. Rechercher et trouver des fichiers sous Linux

Disons que vous venez d'installer une nouvelle copie du nouvel Ubuntu sur votre machine et que vous allez essayer les scripts Python.

Vous avez parcouru le Web à la recherche de didacticiels, mais vous constatez qu'il existe deux versions différentes de Python et vous ne savez pas quelle version de Python est installée sur Ubuntu par le programme d'installation, ou s'il a installé des modules.

Exécutez simplement la commande dpkg suivante avec grep comme indiqué :

dpkg -l | grep -i python

Tout d’abord, nous avons exécuté dpkg –l, qui répertorie les packages *.deb installés sur votre système. Deuxièmement, nous avons redirigé cette sortie vers grep -i python, qui indique simplement « allez dans grep, filtrez et renvoyez tout ce qui contient « python ». »

L'option -i est là pour ignorer la casse, car grep est sensible à la casse. Utiliser l'option -i est une bonne habitude à prendre, à moins, bien sûr, que vous essayiez de définir une recherche plus spécifique.

2. Rechercher et filtrer des fichiers sous Linux

Le grep peut également être utilisé pour rechercher et filtrer des fichiers individuels ou plusieurs fichiers. Prenons ce scénario :

Vous rencontrez des problèmes avec votre serveur Web Apache et vous avez contacté l'un des nombreux forums géniaux sur le net pour demander de l'aide.

La bienveillante âme qui vous répond vous a demandé de poster le contenu de votre fichier /etc/apache2/apache2.conf. Ne serait-il pas plus facile pour vous, pour la personne qui vous aide et pour tous ceux qui le lisent, si vous pouviez supprimer toutes les lignes commentées ? Bien, vous pouvez! Exécutez simplement ceci :

grep -v ^\# /etc/apache2/apache2.conf | grep .

L'option -v indique à grep d'inverser sa sortie, ce qui signifie qu'au lieu d'imprimer les lignes correspondantes, faites l'inverse et imprimez toutes les lignes qui ne correspondent pas à l'expression, dans ce cas, les lignes commentées #.

Notez que nous avons également utilisé grep . à la fin afin de masquer la sortie de toutes les lignes vides. De cette façon, nous ne voyons que les paramètres de configuration dans notre terminal.

3. Recherchez tous les fichiers .mp3 sous Linux

Le grep peut être très utile pour filtrer depuis stdout. Par exemple, disons que vous disposez d’un dossier entier rempli de fichiers musicaux dans de nombreux formats différents.

Vous souhaitez retrouver tous les fichiers *.mp3 de l'artiste JayZ, mais vous ne voulez aucun des morceaux remixés. Utiliser une commande find avec quelques canaux grep fera l'affaire :

find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”

Dans cet exemple, nous utilisons find pour imprimer tous les fichiers avec une extension *.mp3, en les redirigeant vers grep –i pour filtrer sortir et imprimer tous les fichiers portant le nom « JayZ », puis un autre tube vers grep –vi qui filtre et n'imprime pas tous les noms de fichiers avec la chaîne (en aucun cas) « remix ».

4. Afficher le nombre de lignes avant ou après la chaîne de recherche

D'autres options sont les commutateurs -A et -B, qui affichent la ligne correspondante et un certain nombre de lignes qui précèdent ou suivent la chaîne de recherche.

Bien que la page de manuel donne une explication plus détaillée, je trouve qu'il est plus facile de mémoriser les options telles que -A=after et -B=avant :

ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP

5. Imprime le nombre de lignes autour de la correspondance

L'option -C de grep est similaire, mais au lieu d'imprimer les lignes qui précèdent ou suivent la chaîne, elle imprime les lignes dans les deux sens :

ifconfig | grep -C 2 lo

 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 15314  bytes 1593769 (1.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0

6. Comptez le nombre de correspondances

Semblable à la transmission d'une chaîne grep vers le nombre de mots (commande wc), l'option intégrée de grep peut effectuer la même chose pour vous :

ifconfig | grep -c inet6

7. Rechercher des fichiers par chaîne donnée sous Linux

L'option –n pour grep est très utile lors du débogage de fichiers lors d'erreurs de compilation. Il affiche le numéro de ligne dans le fichier de la chaîne de recherche donnée :

grep -n "main" setup.py

8. Rechercher une chaîne de manière récursive dans tous les répertoires

Si vous souhaitez rechercher une chaîne dans le répertoire courant ainsi que dans tous les sous-répertoires, vous pouvez spécifier l'option –r pour effectuer une recherche récursive :

grep -r “function” *

9. Recherchez le modèle entier

Passer l'option -w à grep recherche l'intégralité du modèle contenu dans la chaîne. Par exemple, en utilisant :

ifconfig | grep -w "RUNNING"

Imprimera la ligne contenant le motif entre guillemets. Par contre, si vous essayez :

ifconfig | grep -w "RUN"

Rien ne sera renvoyé car nous ne recherchons pas un modèle, mais un mot entier.

10. Rechercher une chaîne dans les fichiers Gzippés

Les dérivés de grep méritent d’être mentionnés. Le premier est zgrep, qui, similaire à zcat, est destiné à être utilisé sur les fichiers gzippés. Il prend les mêmes options que grep et est utilisé de la même manière :

zgrep -i error /var/log/syslog.2.gz

11. Faire correspondre les expressions régulières dans les fichiers

La commande egrep est un autre dérivé qui signifie « Extended Global Regular Expression ». Il reconnaît les méta-caractères d'expression supplémentaires tels que at + ? | et ().

La commande egrep est très utile pour rechercher des fichiers sources et d'autres morceaux de code, en cas de besoin. Il peut être invoqué à partir de grep normal en spécifiant l'option -E.

grep -E

12. Rechercher une chaîne de modèle fixe

La commande fgrep recherche dans un fichier ou une liste de fichiers une chaîne de modèle fixe. C'est la même chose que grep -F. Une manière courante d'utiliser fgrep consiste à lui transmettre un fichier de modèles :

fgrep –f file_full_of_patterns.txt file_to_search.txt

Ceci n'est qu'un point de départ avec grep, mais comme vous pouvez probablement le constater, il est inestimable à diverses fins. Outre les commandes simples sur une ligne que nous avons implémentées, grep peut être utilisé pour écrire des tâches cron puissantes et des scripts shell robustes, pour un commencer.

Soyez créatif, expérimentez les options de la page de manuel et créez des expressions grep qui répondent à vos propres objectifs !