Comment utiliser la commande grep sous Linux [12 exemples utiles]
Avez-vous déjà été confronté à la tâche de rechercher une corde ou un motif particulier dans un fichier, mais vous ne savez pas par où commencer ? Eh bien, voici l’ordre grep à la rescousse !
grep est un puissant outil de recherche de modèles de fichiers qui est fourni sur toutes les distributions 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 paquets 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 se mouiller les pieds avec la commande grep est de plonger et d’utiliser des exemples du monde réel.
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 tutoriels, mais vous voyez qu’il y a deux versions différentes de Python utilisées, et vous ne savez pas quelle version de Python est installée sur Ubuntu par l’installateur, 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 lancé dpkg -l, qui répertorie les paquets *.deb installés sur votre système. Deuxièmement, nous avons redirigé cette sortie vers grep -i python, qui dit simplement "va à grep et filtre et renvoie tout ce qui contient 'python'. ”
L’option -i est là pour ignore-case, car grep est sensible à la casse. L’utilisation de l’option -i est une bonne habitude à prendre, à moins, bien sûr, que vous n’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 dans 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.
L’âme bienveillante qui vous répond vous a demandé de poster le contenu de votre fichier /etc/apache2/apache2.conf. Ne serait-ce pas plus facile pour vous, pour le gars qui vous aide, et pour tous ceux qui le lisent si vous pouviez supprimer toutes les lignes commentées ? Eh bien, vous pouvez ! Il suffit d’exécuter ceci :
grep -v ^\# /etc/apache2/apache2.conf | grep .
L’option -v indique à grep d’inverser sa sortie, ce qui signifie qu’au lieu d’afficher 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. Trouvez tous les fichiers .mp3 sous Linux
Le grep peut être très utile pour filtrer à partir de stdout. Par exemple, disons que vous avez un dossier entier rempli de fichiers musicaux dans un tas de formats différents.
Vous voulez trouver tous les fichiers *.mp3 de l’artiste JayZ, mais vous ne voulez aucun des morceaux remixés. L’utilisation d’une commande find avec quelques pipes 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 le transférant à grep -i pour filtrer et imprimer tous les fichiers portant le nom « JayZ », puis un autre tube à grep -vi qui filtre et n’imprime pas tous les noms de fichiers avec la chaîne (dans tous les cas) « remix ».
4. Affichez 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 se souvenir des options -A=après, 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’afficher les lignes qui viennent avant ou après la chaîne, il 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
De la même manière que pour la transmission d’une chaîne grep au nombre de mots (commande wc), l’option intégrée de grep peut effectuer la même chose pour vous :
# ifconfig | grep -c inet67. 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.py8. Recherche récursive d’une chaîne dans tous les répertoires
Si vous souhaitez rechercher une chaîne dans le répertoire courant avec tous les sous-répertoires, vous pouvez spécifier l’option –r pour effectuer une recherche récursive :
# grep -r “function” *
9. Recherchez l’intégralité du motif
Passer l’option -w à grep recherche l’intégralité du motif qui se trouve dans la chaîne. Par exemple, en utilisant :
# ifconfig | grep -w "RUNNING"Imprimera la ligne contenant le motif entre guillemets. D’autre part, 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 Gzipped
Les dérivés de grep méritent d’être mentionnés. Le premier est zgrep, qui, comme zcat, est destiné à être utilisé sur des fichiers compressé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 une autre dérivée qui signifie « Extended Global Regular Expression ». Il reconnaît des méta-caractères d’expression supplémentaires tels que +, ?, | et ().
La commande egrep est très utile pour rechercher des fichiers sources et d’autres morceaux de code, si nécessaire. Il peut être invoqué à partir de grep normal en spécifiant l’option -E.
grep -E
12. Rechercher une chaîne de motif fixe
La commande fgrep recherche une chaîne de motif fixe dans un fichier ou une liste de fichiers. C’est la même chose que grep -F. Une façon courante d’utiliser fgrep est de lui passer un fichier de motifs :
fgrep –f file_full_of_patterns.txt file_to_search.txtCe n’est qu’un point de départ avec grep, mais comme vous pouvez probablement le voir, il est inestimable à diverses fins. En plus des simples commandes d’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 commencer.
Soyez créatif, expérimentez les options de la page de manuel et trouvez des expressions grep qui servent vos propres objectifs !




