Recherche de site Web

Introduction aux commandes Linux grep, egrep, fgrep et rgrep


La commande grep sur les systèmes Linux est l’une des commandes les plus courantes que vous rencontrerez. Si nous devions résumer cette commande, nous dis-le qu’elle est utilisée pour trouver une chaîne ou du texte spécifié à l’intérieur d’un fichier. Mais même avec une explication simple comme celle-ci, la quantité de choses pour lesquelles elle peut être utilisée est assez stupéfiante.

La commande grep a également quelques cousins proches, au cas où vous trouveriez qu’elle n’est pas à la hauteur. C’est là que des commandes comme egrep, fgrep et rgrep sont utiles. Ces commandes fonctionnent toutes de la même manière que grep, mais étendent ses fonctionnalités et simplifient parfois sa syntaxe. Oui, cela semble déroutant au début. Mais ne vous inquiétez pas, nous allons vous aider à maîtriser l’alphabet des commandes grep dans ce guide.

Dans ce tutoriel, nous allons passer en revue divers exemples de commandes pour grep, egrep, fgrep et rgrep sous Linux. Lisez la suite pour voir comment ces commandes fonctionnent, et n’hésitez pas à les utiliser sur votre propre système au fur et à mesure afin que vous puissiez vous familiariser avec elles.

Dans ce tutoriel, vous allez apprendre :

  • Exemples de commandes pour grep, egrep, fgrep, rgrep

Commandes grep, egrep, fgrep et rgrep sous Linux

grep

Pour nos exemples, nous avons créé un document texte simple nommé distros.txt qui contient un tas de noms de distributions Linux. Voyez ci-dessous comment nous utilisons grep et ses commandes associées pour rechercher dans ce fichier certains textes et motifs.

  1. Comme mentionné précédemment, grep peut être utilisé pour rechercher une chaîne de caractères dans un fichier. Cherchons le mot « Ubuntu » :

    grep Ubuntu distros.txt 
    Ubuntu
    
  2. Comme tout le reste sous Linux, grep est également sensible à la casse. Pour ignorer la casse, nous devons utiliser grep avec la combinaison de l’option -i :

    grep -i ubuntu distros.txt 
    Ubuntu
    Kubuntu
    Xubuntu
    
  3. L’option -n indiquera le numéro de ligne sur lequel chaque correspondance a été trouvée.

    grep -i -n ubuntu distros.txt 
    3:Ubuntu
    8:Kubuntu
    9:Xubuntu
    
  4. Nous pouvons également utiliser l’option -v (inverser) pour afficher les lignes qui ne correspondent pas à notre modèle de recherche.

    grep -iv ubuntu distros.txt
    Arch Linux
    AlmaLinux
    Fedora
    Red Hat Enterprise Linux
    CentOS
    Linux Mint
    Debian
    Manjaro
    openSUSE
    
  5. Comme vous pouvez le voir, toutes les distributions sont répertoriées sauf celles qui contenaient « Ubuntu » (insensible à la casse).

  6. Avec l’option -c, grep peut compter le nombre d’occurrences de chaîne dans les fichiers. Donc, ici, grep affichera le nombre de fois où Ubuntu n’apparaît PAS dans le fichier :

    grep -ivc ubuntu distros.txt
    9
    
  7. L’option -x n’affichera que les occurrences exactes.

    grep -ix ubuntu distros.txt
    Ubuntu
    
  8. Les administrateurs système apprécieront certainement cet exemple lors de la recherche dans les fichiers journaux. -B3 (affichage de 3 lignes avant le match) et -A3 (affichage de 3 lignes après le match) donneront plus de contexte à votre sortie.

    grep -B3 -A3 command /var/log/dmesg
    [    0.201120] kernel: pcpu-alloc: [0] 0 
    [    0.201186] kernel: Built 1 zonelists, mobility grouping on.  Total pages: 515961
    [    0.201188] kernel: Policy zone: DMA32
    [    0.201191] kernel: Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.8.0-59-generic root=UUID=a80ad9d4-90ff-4903-b34d-ca70d82762ed ro quiet splash
    [    0.201563] kernel: Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
    [    0.201648] kernel: Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
    [    0.201798] kernel: mem auto-init: stack:off, heap alloc:on, heap free:off
    

grep et regex

grep et les expressions régulières est un sujet qui peut couvrir tout un livre, mais il serait dommage de ne pas montrer au moins quelques exemples pour grep et les expressions régulières.

  1. Pour que grep ne renvoie que les lignes contenant des chiffres, nous utiliserions la commande :

    grep [0-9] file.txt
    
  2. Pour compter toutes les lignes vides d’un fichier à l’aide de grep, nous utilisons cette commande :

    grep -ch ^$ file.txt
    


  3. Voyons quelle ligne commence par « L » et se termine par un nombre. ^ est utilisé pour correspondre au début d’une ligne, et $ est utilisé pour correspondre à la fin d’une ligne :

    grep ^L.*[0-9]$ file.txt
    
  4. Pour que grep ne corresponde qu’aux lignes où « b » est un troisième caractère du mot, nous pouvons utiliser la commande suivante :

    grep ..b file.txt
    

egrep

EGREP est la version étendue de grep. En d’autres termes, egrep est égal à grep -E. EGREP prend en charge des modèles d’expression plus réguliers.

  1. Recherchons des lignes qui contiennent exactement deux caractères « p » consécutifs :

    egrep p{2} file.txt
    OR
    grep pp file.txt
    OR
    grep -E p{2} file.txt
    
  2. Obtenons une sortie de la commande egrep de toutes les lignes qui se terminent par « S » ou « A » :



    egrep "S$|A$" file.txt
    

fgrep

FGREP est une version plus rapide de grep qui ne prend pas en charge les expressions régulières et est donc considérée comme plus rapide. fgrep est égal à grep -F. C’est pratique à utiliser dans des scripts ou sur des fichiers volumineux où vous n’avez pas besoin de la robustesse supplémentaire de grep normal, car les résultats devraient être renvoyés plus rapidement, et avec un impact moindre sur les ressources système.

  1. Vous ne pouvez utiliser qu’une recherche de motifs simples avec cet outil, comme les suivants :

    fgrep Fedora distros.txt 
    Fedora
    
  2. Les expressions ne fonctionneront PAS et renvoient simplement une sortie vide.

    fgrep -i linux$ distros.txt 
    grep -i linux$ distros.txt 
    Arch Linux
    AlmaLinux
    Red Hat Enterprise Linux
    

rgrep

rgrep est une version récursive de grep. Récursif dans ce cas signifie que rgrep peut descendre récursivement dans les répertoires pendant qu’il répare le motif spécifié. rgrep est similaire à grep -r.

  1. Recherchez dans tous les fichiers, de manière récursive, une chaîne « linux ».

    rgrep -i linux *
    dir1/RHEL-based.txt:AlmaLinux
    dir1/RHEL-based.txt:Red Hat Enterprise Linux
    dir2/Debian-based.txt:Linux Mint
    

Réflexions finales

Dans ce guide, nous avons vu divers exemples de commandes pour grep, egrep, fgrep et rgrep sur Linux. À la base, ces commandes ne sont utilisées que pour rechercher certains modèles de chaînes dans un ou plusieurs fichiers. Comme vous l’avez vu dans les exemples ci-dessous, leurs fonctionnalités peuvent être facilement étendues et appliquées à de nombreux scénarios utiles.

Articles connexes: