Commandes de base

grep : Afficher les lignes correspondant à un motif donné

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

Introduction



grep est un programme en ligne de commande de recherche de chaînes de caractères


Syntaxe de la commande



Code BASH :
grep [options] modèle_de_critères [fichier1 ...]



Utiliser grep




Cas simple : filtrer des lignes d'une commande



L'utilisation basique de grep où on souhaite filtrer la sortie d'une commande, avec ici, filtrer que ce qui contient max_input_time :

Code BASH :
cat /etc/php/apache2-php5.6/php.ini | grep max_input_time


La sortie :
Code BASH :
; max_input_time
max_input_time = 300
 


Filtrer des lignes d'un fichier



Dans le cas d'un fichier, on peut le faire qu'avec grep (utilisation d'une seule commande et donc plus "performant" que l'emploi de 2 commandes) :

Code BASH :
grep max_input_time /etc/php/apache2-php5.6/php.ini


La sortie :
Code BASH :
; max_input_time
max_input_time = 300
 


Chercher les occurrences dans tous les fichiers d'un dossier



Si on veut chercher dans des fichiers de manière récursive :

Code BASH :
grep -r max_input_time /etc/php/


La sortie (on remarque qu'on a le nom des fichiers) :
Code BASH :
/etc/php/fpm-php5.6/php.ini:; max_input_time
/etc/php/fpm-php5.6/php.ini:max_input_time = 60
/etc/php/apache2-php5.6/php.ini:; max_input_time
/etc/php/apache2-php5.6/php.ini:max_input_time = 300
/etc/php/cgi-php5.6/php.ini:; max_input_time
/etc/php/cgi-php5.6/php.ini:max_input_time = 60
/etc/php/cli-php5.6/php.ini:; max_input_time
/etc/php/cli-php5.6/php.ini:max_input_time = 60
 



Afficher un fichier de conf sans les commentaires et lignes vides



On utilise ici l'option -v qui affiche le contraire de ce qui est indiqué dans l'expression régulière :

Code BASH :
grep -v -E "(#|^$)" /etc/logrotate.conf



Afficher uniquement ce qui nous intéresse dans la ligne



On va alors utiliser l'option -o qui n'affiche que ce qui correspond.
Exemple ici, n'afficher que les adresses IP du fichier hosts :

Code BASH :
grep -Eo '^([0-9])+.([0-9])+.([0-9])+.([0-9])+' /etc/hosts