Avez-vous déjà été confronté à la tâche de rechercher une chaîne ou un motif particulier dans un fichier, mais vous ne savez pas par où commencer ? Eh bien, voici grep à la rescousse!
grep est un puissant chercheur de modèles de fichiers qui est équipé sur 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 trouvé que le moyen le plus simple de se mouiller les pieds avec le commande grep consiste simplement à plonger dans le vif du sujet et à utiliser des exemples concrets.
1. Rechercher et trouver des fichiers sous Linux
Disons que vous venez d’installer une nouvelle copie du nouveau Ubuntu sur votre machine et que vous allez donner Python scénariser un plan.
Vous avez parcouru le Web à la recherche de tutoriels, mais vous voyez qu’il existe deux versions différentes de Python en cours d’utilisation, 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 montré:
# dpkg -l | grep -i python
Recherche de fichiers avec la commande Grep
ii libpython3-stdlib:amd64 3.8.2-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version) ii libpython3.8:amd64 3.8.10-0ubuntu1~20.04.5 amd64 Shared Python runtime library (version 3.8) ii libpython3.8-minimal:amd64 3.8.10-0ubuntu1~20.04.5 amd64 Minimal subset of the Python language (version 3.8) ii libpython3.8-stdlib:amd64 3.8.10-0ubuntu1~20.04.5 amd64 Interactive high-level object-oriented language (standard library, version 3.8) ii python-apt-common 2.0.0ubuntu0.20.04.8 all Python interface to libapt-pkg (locales) ii python3 3.8.2-0ubuntu2 amd64 interactive high-level object-oriented language (default python3 version) ii python3-apport 2.20.11-0ubuntu27.24 all Python 3 library for Apport crash report handling ii python3-apt 2.0.0ubuntu0.20.04.8 amd64 Python 3 interface to libapt-pkg ii python3-aptdaemon 1.1.1+bzr982-0ubuntu32.3 all Python 3 modules for the server and client of aptdaemon ii python3-aptdaemon.gtk3widgets 1.1.1+bzr982-0ubuntu32.3 all Python 3 GTK+ 3 widgets to run an aptdaemon client ii python3-blinker 1.4+dfsg1-0.3ubuntu1 all fast, simple object-to-object and broadcast signaling library ii python3-brlapi:amd64 6.0+dfsg-4ubuntu6 amd64 Braille display access via BRLTTY - Python3 bindings ...
D’abord, nous avons couru dpkg –l
qui répertorie les installations *.deb
paquets sur votre système. Deuxièmement, nous avons redirigé cette sortie vers grep –i
python, qui indique simplement « aller à grep et filtrer et renvoyer tout avec ‘python‘ dedans. »
La –i
l’option est là pour ignorer la casse, comme grep est sensible à la casse. En utilisant le –i
option est une bonne habitude à prendre à moins, bien sûr, que vous essayiez de cibler une recherche plus spécifique.
2. Rechercher et filtrer des fichiers sous Linux
La grep peut également être utilisé pour rechercher et filtrer dans des fichiers individuels ou dans plusieurs fichiers. Prenons ce scénario :
Vous rencontrez des problèmes avec votre Serveur Web Apacheet 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 /etc/apache2/apache2.conf dossier. Ne serait-il pas plus facile pour vous, le gars qui vous aide et 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 .
La –v
l’option indique grep pour 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, le #
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.
Imprimer le contenu du fichier en excluant les commentaires et les lignes vides
DefaultRuntimeDir ${APACHE_RUN_DIR} PidFile ${APACHE_PID_FILE} Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf Include ports.conf <Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory>
3. Trouvez tous les fichiers .mp3 sous Linux
La grep peut être très utile pour filtrer sortie standard. Par exemple, disons que vous avez un dossier complet rempli de fichiers musicaux dans un tas de formats différents.
Vous voulez trouver tous les *.mp3
fichiers de l’artiste Jay Z, mais vous ne voulez aucune des pistes remixées. Utilisant un trouver la commande avec un couple de grep les tuyaux feront l’affaire :
# find . –name “*.mp3” | grep –i JayZ | grep –vi “remix”
Dans cet exemple, nous utilisons trouver pour imprimer tous les fichiers avec un *.mp3
extension, en la raccordant à grep –i
pour filtrer et imprimer tous les fichiers portant le nom « Jay Z” puis un autre tuyau pour grep –vi
qui filtre et n’imprime pas tous les noms de fichiers avec la chaîne (dans tous les cas) « remixer”.
[ You might also like: 35 Practical Examples of Linux Find Command ]
4. Afficher le nombre de lignes avant ou après la chaîne de recherche
Un autre couple d’options sont les –A
et –B
commutateurs, qui affichent la ligne correspondante et le 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 comme –A
= aprèset –B
= avant de:
# ifconfig | grep -A 4 inet # ifconfig | grep -B 2 UP
5. Imprime le nombre de lignes autour du match
Le grép’s –C
est similaire, mais au lieu d’imprimer les lignes qui viennent avant ou après 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 matchs
Similaire à la tuyauterie a grep chaîne en 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
La –n
option 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 avec tous les sous-répertoires, vous pouvez spécifier le –r
possibilité de rechercher récursivement :
# grep -r “function” *
9. Rechercher le motif entier
Passer le -w
L’option grep recherche le motif entier qui se trouve dans la chaîne. Par exemple, en utilisant :
# ifconfig | grep -w "RUNNING"
Imprime 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 compressés
Les dérivés de grep méritent d’être mentionnés. Le premier est zgrepqui, à l’instar de zcatest à utiliser sur gzippé des dossiers. Il prend les mêmes options que grep et s’utilise 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 « Expression régulière globale étendue”. Il reconnaît des méta-caractères d’expression supplémentaires tels que at + ? |
et ()
.
[ You might also like: What’s Difference Between Grep, Egrep, and Fgrep in Linux? ]
égrep est très utile pour rechercher des fichiers source et d’autres morceaux de code, en cas de besoin. Il peut être invoqué à partir de grep en précisant le –E
option.
# grep -E
12. Rechercher une chaîne de modèle fixe
La grep 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 façon courante d’utiliser grep est de lui passer un fichier de patterns :
# 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 êtes probablement en mesure de le voir, il est inestimable à diverses fins. Mis à part les simples commandes d’une ligne que nous avons implémentées, grep peut être utilisé pour écrire puissant cron emplois, et robuste scripts shellpour un début.
[ You might also like: 11 Advanced Linux ‘Grep’ Commands on Character Classes and Bracket Expressions ]
Soyez créatif, expérimentez avec les options sur le page de manuelet proposer grep expressions qui servent vos propres objectifs !