GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la commande Grep pour rechercher du texte dans des fichiers

Systèmes de type Linux et UNIX, toutes les informations de configuration du système sont stockées et manipulées sous forme de texte brut. Ainsi, la recherche de texte serait une tâche très courante pour l'édition et l'analyse des journaux.

La commande grep permet de rechercher un texte ou une chaîne dans un fichier ou depuis la console de sortie d'une commande, pour un terme ou un modèle correspondant à des expressions régulières. Lorsque grep trouve une correspondance dans une ligne, il copie les résultats dans l'écran, c'est-à-dire stdout.

Dans ce didacticiel, nous apprenons à utiliser la commande grep avec des exemples pratiques.

Commande Grep

Vérifions la syntaxe de la commande grep avant de commencer à expliquer son utilisation.

grep [OPTIONS] PATTERN [FILE...]

Nous discuterons en détail des options et des modèles de grep les plus courants que nous pouvons utiliser pour la recherche.

Comment rechercher une chaîne dans un fichier

Dans l'exemple ci-dessous, grep recherche dans le fichier /etc/passwd la chaîne 'root' et redirige la sortie vers stdout.

$ grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

Rechercher du texte dans plusieurs fichiers

Vous pouvez rechercher du texte spécifique dans plusieurs fichiers à l'aide de la commande suivante :

$ grep "root" /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:root
/etc/group:bin:x:1:root,bin,daemon
/etc/group:daemon:x:2:root,bin,daemon
/etc/group:sys:x:3:root,bin,adm
/etc/group:adm:x:4:root,adm,daemon
/etc/group:disk:x:6:root
/etc/group:wheel:x:10:root

Recherche grep insensible à la casse

Options -i recherche insensiblement la casse de la chaîne/du modèle donné.

Dans les exemples suivants, grep correspond à tous les mots tels que "hal", "HAL" insensible à la casse :

$ grep -i HAL /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

Recherche récursive

La recherche récursive est réalisée en utilisant -r option qui recherchera récursivement tous les fichiers en sautant les liens symboliques. Si vous souhaitez inclure des liens symboliques, utilisez -R .

Dans l'exemple suivant, la commande grep recherchera la chaîne 'ngnix' dans tous les fichiers à l'intérieur de /var répertoire.

$ grep -r nginx /var

Rechercher une chaîne dans la sortie de la commande (stdout)

Vous pouvez utiliser pipe la sortie d'une commande et grep pour le modèle à partir de sa sortie.

Dans l'exemple suivant, je recherche un fichier nommé 'backup' à l'aide de la commande ls

$ ls | grep backup

Ici, je fais plusieurs canaux et je recherche les processus 'docker' et 'apache' à partir de la commande ps.

$ ps -ef | grep docker | grep apache

Expressions régulières dans les fichiers

Les expressions régulières sont un modèle à faire correspondre pour chaque ligne d'entrée. Basic et Extended sont les deux expressions régulières utilisées par la commande grep.

Expression régulière de base

Par défaut, grep interprète le modèle comme une expression régulière de base.

Le symbole ^ (caret) - Le motif qui le suit doit apparaître au début de chaque ligne. Dans l'exemple suivant, la chaîne ^welcome ne correspondra que si elle apparaît au tout début d'une ligne.

$ grep “^welcome” filename

Expression régulière étendue

Utilisez -E (ou --extended-regexp) si vous voulez que grep la comprenne comme une expression régulière étendue.

La commande suivante extraira tous les liens d'un fichier

$ grep –Eoi '<a[^>]+>.*</a>' filename

o :Par défaut, grep imprime toute la ligne contenant le motif de recherche. Cette option indique à la commande grep d'imprimer uniquement les mots correspondants au lieu de la ligne entière.

i  :Cette option demande à la commande grep d'ignorer la casse lors de la correspondance du modèle.

Rechercher un mot complet à l'aide de grep

Le -w (word-regexp) flag pour grep fera que l'expression donnée ne correspondra qu'à des mots entiers.

$ grep -iw "samba" /etc/samba/smb.conf
# This is the main Samba configuration file. You should read the
# here. Samba has a huge number of configurable options (perhaps too
# For a step to step guide on installing, configuring and using samba,
# read the Samba-HOWTO-Collection. This may be obtained from:

Afficher les lignes après la correspondance de chaîne

Le -A option qui affiche le N lignes après la correspondance de chaîne.

$ grep -A 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

Afficher les lignes avant la correspondance de chaîne

Nous pouvons utiliser -B possibilité d'afficher N lignes avant la chaîne pour un fichier donné

$ grep -B 2 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

Rechercher plusieurs chaînes

Nous pouvons rechercher plusieurs modèles ou chaînes en utilisant l'opérateur OU | et \| . -E (extended-regexp) contrôle si vous devez échapper certains caractères spéciaux. -e est strictement le drapeau pour indiquer le modèle que vous voulez comparer.

Exemple 1 :utilisation de l'option -E

$ ls | grep -E “li|ovo”
linux24
ovo8_linux24.sh

Ou

$ grep -E "foo|bar" *.txt

Exemple 2 :sans -E

$ ls | grep ‘li\|ovo’
linux24
ovo8_linux24.sh

Ou

$ grep "foo\|soul\|bar" *.txt

Exclure un fichier spécifique de la recherche

Vous pouvez utiliser l'option -v pour ignorer la recherche. La commande suivante recherchera la chaîne 'error' dans tous les fichiers sauf 'syslog.log'

$ grep -r error * | grep -v ‘/\syslog.log/’

Conclusion

Dans ce didacticiel, nous avons appris à utiliser la commande grep pour rechercher du texte dans des fichiers. J'espère que vous avez apprécié cette lecture et n'hésitez pas à laisser vos suggestions dans la section des commentaires ci-dessous.


Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande Linux find pour rechercher des fichiers

  3. Commande Linux :Comment "trouver" uniquement des fichiers texte ?

  4. Comment trouver des fichiers texte ne contenant pas de texte sous Linux ?

  5. Comment puis-je trouver tous les fichiers contenant du texte spécifique sous Linux ?

Comment utiliser la commande grep sur Debian 10

Comment rechercher des fichiers avec la commande fd sous Linux

Comment utiliser grep sous Linux

Rechercher du texte dans des fichiers sous Linux à l'aide de grep

Comment utiliser Plus de commandes sous Linux pour lire des fichiers texte volumineux

Comment rechercher et remplacer du texte dans Vim