Utilisation de grep
A quoi sert grep et egrep
Il est parfois utile de rechercher des chaines de caractères dans un fichier ou même dans la sortie standard de notre terminal. Grep permet cela facilement.
Rechercher une suite de caractères dans un fichier :
> # grep ma_recherche toto.txt
ma_recherche
Il est également possible de faire la recherche sur tous les fichiers présents dans le répertoire :
> # grep ma_re *
grep: rep: Is a directory
toto.txt:ma_recherche
Rechercher une suite de caractère dans la sortie standard du terminal
Il est possible également d’utiliser grep pour filtrer les résultats donnés par la sortie standard de notre terminal. Pour cela, nous utilisons grep en sortie de la commande. Pour cela, nous utilisons le caractère “|” (pipe).
L’utilisation reste alors la même que précédemment.
> # cat toto.txt |grep ma_
ma_recherche
Ou alors :
> # ls -l|grep toto
-rw-r--r-- 1 root root 13 Jan 27 14:29 toto.txt
Recherche en utilisant les REGEX
Dans des contexts un peu plus compliqués, nous pouvons rechercher par exemple des schémas de chaines de caractères plutôt que des chaines précises. Par exemple, si je souhaite connaitre la taille de tous les fichiers et répertoires de l’emplacement où je suis, je peux utiliser la commande “du -sh *”.
> # du -sh *
3.1M anaconda
15M audit
0 boot.log
8.0K boot.log-20210120
8.0K boot.log-20210121
8.0K boot.log-20210306
8.0K boot.log-20210421
8.0K boot.log-20210623
8.0K boot.log-20210707
8.0K boot.log-20210915
0 btmp
0 btmp-20220101
0 chrony
32K cron
48K cron-20220102
48K cron-20220109
48K cron-20220116
48K cron-20220123
496K dnf.librepo.log
1.1M dnf.librepo.log.1
1.0M dnf.librepo.log.2
140K dnf.librepo.log-20210530
136K dnf.librepo.log-20210606
140K dnf.librepo.log-20210613
144K dnf.librepo.log-20210620
1.1M dnf.librepo.log.3
J’obtiens alors une liste plus ou moins longue, qui sera fastidieuse à analyser. Je vais donc rechercher uniquement les fichiers les plus volumineux (ici les fichiers > à 1M) :
> # du -sh * |grep -E '^([0-9].[0-9])M'
3.1M anaconda
1.1M dnf.librepo.log.1
1.0M dnf.librepo.log.2
1.1M dnf.librepo.log.3
1.0M dnf.log.1
1.1M dnf.log.2
1.1M dnf.log.3
1.1M dnf.log.4
En utilisant l’option “-E”, nous pouvons alors passer en paramètre une expression régulière. Ici, nous recherchons le schéma suivant : En début de ligne (^) les nombres décimaux [0-0].[0-9] qui sont imédiatement suivi de la lettre “M”.
Notons que la commande “egrep” remplace “grep -E”.