La commande grep recherche une chaine de caractères dans un ou plusieurs fichiers textes et affiche à l'écran les lignes contenant cette chaine. La chaine recherchée est matérialisée par une expression régulière basique ERb (défaut) ou étendue ERe grâce à l'option -E.
Syntaxe
grep [options] expreg [fichiers...]
grep [options] -e expreg1 -e expreg2 [fichiers...]
grep [options] -f fichier_expreg [fichiers...]
Principales options :
-c affiche le nombre de lignes trouvées
-e permet de spécifier plusieurs expressions régulières
-E permet d'utiliser les ERe
-f permet de lire les expressions régulières à partir d'un fichier
-F permet de ne pas interpréter le motif de recherche comme une expression régulière
-i permet une recherche insensible à la casse
-l permet de seulement afficher les noms des fichiers contenant l'expression régulière recherchée
-n permet de numéroter les lignes trouvées
-q permet d'effectuer une recherche sans afficher le résultat à l'écran
-v permet une recherche ne contenant pas l'expression régulière
-w l'expression recherchée doit correspondre à un mot entier
-x l'expression recherchée doit correspondre à une ligne entière
-B n Affiche n lignes avant l'expression recherchée (-B pour Before)
-A n Affiche n lignes après l'expression recherchée (-A pour After)
-C n Affiche n lignes avant et après l'expression recherchée
-P permet d'utiliser des regex compatible PERL
Exemple
Utilisation du fichier depts2012.txt pour les exemples
$ cat depts2012.txt
REGION DEP CHEFLIEU TNCC NCC NCCENR
82 01 01053 5 AIN Ain
22 02 02408 5 AISNE Aisne
83 03 03190 5 ALLIER Allier
93 04 04070 4 ALPES-DE-HAUTE-PROVENCE Alpes-de-Haute-Provence
93 05 05061 4 HAUTES-ALPES Hautes-Alpes
93 06 06088 4 ALPES-MARITIMES Alpes-Maritimes
82 07 07186 5 ARDECHE Ardèche
21 08 08105 4 ARDENNES Ardennes
73 09 09122 5 ARIEGE Ariège
21 10 10387 5 AUBE Aube
91 11 11069 5 AUDE Aude
73 12 12202 5 AVEYRON Aveyron
93 13 13055 4 BOUCHES-DU-RHONE Bouches-du-Rhône
25 14 14118 2 CALVADOS Calvados
83 15 15014 2 CANTAL Cantal
54 16 16015 3 CHARENTE Charente
54 17 17300 3 CHARENTE-MARITIME Charente-Maritime
24 18 18033 2 CHER Cher
74 19 19272 3 CORREZE Corrèze
94 2A 2A004 3 CORSE-DU-SUD Corse-du-Sud
94 2B 2B033 3 HAUTE-CORSE Haute-Corse
26 21 21231 3 COTE-D'OR Côte-d'Or
53 22 22278 4 COTES-D'ARMOR Côtes-d'Armor
74 23 23096 3 CREUSE Creuse
72 24 24322 3 DORDOGNE Dordogne
43 25 25056 2 DOUBS Doubs
82 26 26362 3 DROME Drôme
23 27 27229 5 EURE Eure
24 28 28085 1 EURE-ET-LOIR Eure-et-Loir
53 29 29232 2 FINISTERE Finistère
91 30 30189 2 GARD Gard
73 31 31555 3 HAUTE-GARONNE Haute-Garonne
73 32 32013 2 GERS Gers
72 33 33063 3 GIRONDE Gironde
91 34 34172 5 HERAULT Hérault
53 35 35238 1 ILLE-ET-VILAINE Ille-et-Vilaine
24 36 36044 5 INDRE Indre
24 37 37261 1 INDRE-ET-LOIRE Indre-et-Loire
82 38 38185 5 ISERE Isère
43 39 39300 2 JURA Jura
72 40 40192 4 LANDES Landes
24 41 41018 0 LOIR-ET-CHER Loir-et-Cher
82 42 42218 3 LOIRE Loire
83 43 43157 3 HAUTE-LOIRE Haute-Loire
52 44 44109 3 LOIRE-ATLANTIQUE Loire-Atlantique
24 45 45234 2 LOIRET Loiret
73 46 46042 2 LOT Lot
72 47 47001 0 LOT-ET-GARONNE Lot-et-Garonne
91 48 48095 3 LOZERE Lozère
52 49 49007 0 MAINE-ET-LOIRE Maine-et-Loire
25 50 50502 3 MANCHE Manche
21 51 51108 3 MARNE Marne
21 52 52121 3 HAUTE-MARNE Haute-Marne
52 53 53130 3 MAYENNE Mayenne
41 54 54395 0 MEURTHE-ET-MOSELLE Meurthe-et-Moselle
41 55 55029 3 MEUSE Meuse
53 56 56260 2 MORBIHAN Morbihan
41 57 57463 3 MOSELLE Moselle
26 58 58194 3 NIEVRE Nièvre
31 59 59350 2 NORD Nord
22 60 60057 5 OISE Oise
25 61 61001 5 ORNE Orne
31 62 62041 2 PAS-DE-CALAIS Pas-de-Calais
83 63 63113 2 PUY-DE-DOME Puy-de-Dôme
72 64 64445 4 PYRENEES-ATLANTIQUES Pyrénées-Atlantiques
73 65 65440 4 HAUTES-PYRENEES Hautes-Pyrénées
91 66 66136 4 PYRENEES-ORIENTALES Pyrénées-Orientales
42 67 67482 2 BAS-RHIN Bas-Rhin
42 68 68066 2 HAUT-RHIN Haut-Rhin
82 69 69123 2 RHONE Rhône
43 70 70550 3 HAUTE-SAONE Haute-Saône
26 71 71270 0 SAONE-ET-LOIRE Saône-et-Loire
52 72 72181 3 SARTHE Sarthe
82 73 73065 3 SAVOIE Savoie
82 74 74010 3 HAUTE-SAVOIE Haute-Savoie
11 75 75056 0 PARIS Paris
23 76 76540 3 SEINE-MARITIME Seine-Maritime
11 77 77288 0 SEINE-ET-MARNE Seine-et-Marne
11 78 78646 4 YVELINES Yvelines
54 79 79191 4 DEUX-SEVRES Deux-Sèvres
22 80 80021 3 SOMME Somme
73 81 81004 2 TARN Tarn
73 82 82121 0 TARN-ET-GARONNE Tarn-et-Garonne
93 83 83137 2 VAR Var
93 84 84007 0 VAUCLUSE Vaucluse
52 85 85191 3 VENDEE Vendée
54 86 86194 3 VIENNE Vienne
74 87 87085 3 HAUTE-VIENNE Haute-Vienne
41 88 88160 4 VOSGES Vosges
26 89 89024 5 YONNE Yonne
43 90 90010 0 TERRITOIRE_DE_BELFORT Territoire de Belfort
11 91 91228 5 ESSONNE Essonne
11 92 92050 4 HAUTS-DE-SEINE Hauts-de-Seine
11 93 93008 3 SEINE-SAINT-DENIS Seine-Saint-Denis
11 94 94028 2 VAL-DE-MARNE Val-de-Marne
11 95 95500 2 VAL-D'OISE Val-d'Oise
01 971 97105 3 GUADELOUPE Guadeloupe
02 972 97209 3 MARTINIQUE Martinique
03 973 97302 3 GUYANE Guyane
04 974 97411 0 LA_REUNION La Réunion
06 976 97608 0 MAYOTTE Mayotte
$
$ grep 85191 depts2012.txt
52 85 85191 3 VENDEE Vendée
$
$ grep -E -i '(paris|vosges)' depts2012.txt
11 75 75056 0 PARIS Paris
41 88 88160 4 VOSGES Vosges
$
$ grep -v '^9' depts2012.txt
REGION DEP CHEFLIEU TNCC NCC NCCENR
82 01 01053 5 AIN Ain
22 02 02408 5 AISNE Aisne
83 03 03190 5 ALLIER Allier
82 07 07186 5 ARDECHE Ardèche
21 08 08105 4 ARDENNES Ardennes
73 09 09122 5 ARIEGE Ariège
21 10 10387 5 AUBE Aube
73 12 12202 5 AVEYRON Aveyron
25 14 14118 2 CALVADOS Calvados
83 15 15014 2 CANTAL Cantal
54 16 16015 3 CHARENTE Charente
54 17 17300 3 CHARENTE-MARITIME Charente-Maritime
24 18 18033 2 CHER Cher
74 19 19272 3 CORREZE Corrèze
26 21 21231 3 COTE-D'OR Côte-d'Or
53 22 22278 4 COTES-D'ARMOR Côtes-d'Armor
74 23 23096 3 CREUSE Creuse
72 24 24322 3 DORDOGNE Dordogne
43 25 25056 2 DOUBS Doubs
82 26 26362 3 DROME Drôme
23 27 27229 5 EURE Eure
24 28 28085 1 EURE-ET-LOIR Eure-et-Loir
53 29 29232 2 FINISTERE Finistère
73 31 31555 3 HAUTE-GARONNE Haute-Garonne
73 32 32013 2 GERS Gers
72 33 33063 3 GIRONDE Gironde
53 35 35238 1 ILLE-ET-VILAINE Ille-et-Vilaine
24 36 36044 5 INDRE Indre
24 37 37261 1 INDRE-ET-LOIRE Indre-et-Loire
82 38 38185 5 ISERE Isère
43 39 39300 2 JURA Jura
72 40 40192 4 LANDES Landes
24 41 41018 0 LOIR-ET-CHER Loir-et-Cher
82 42 42218 3 LOIRE Loire
83 43 43157 3 HAUTE-LOIRE Haute-Loire
52 44 44109 3 LOIRE-ATLANTIQUE Loire-Atlantique
24 45 45234 2 LOIRET Loiret
73 46 46042 2 LOT Lot
72 47 47001 0 LOT-ET-GARONNE Lot-et-Garonne
52 49 49007 0 MAINE-ET-LOIRE Maine-et-Loire
25 50 50502 3 MANCHE Manche
21 51 51108 3 MARNE Marne
21 52 52121 3 HAUTE-MARNE Haute-Marne
52 53 53130 3 MAYENNE Mayenne
41 54 54395 0 MEURTHE-ET-MOSELLE Meurthe-et-Moselle
41 55 55029 3 MEUSE Meuse
53 56 56260 2 MORBIHAN Morbihan
41 57 57463 3 MOSELLE Moselle
26 58 58194 3 NIEVRE Nièvre
31 59 59350 2 NORD Nord
22 60 60057 5 OISE Oise
25 61 61001 5 ORNE Orne
31 62 62041 2 PAS-DE-CALAIS Pas-de-Calais
83 63 63113 2 PUY-DE-DOME Puy-de-Dôme
72 64 64445 4 PYRENEES-ATLANTIQUES Pyrénées-Atlantiques
73 65 65440 4 HAUTES-PYRENEES Hautes-Pyrénées
42 67 67482 2 BAS-RHIN Bas-Rhin
42 68 68066 2 HAUT-RHIN Haut-Rhin
82 69 69123 2 RHONE Rhône
43 70 70550 3 HAUTE-SAONE Haute-Saône
26 71 71270 0 SAONE-ET-LOIRE Saône-et-Loire
52 72 72181 3 SARTHE Sarthe
82 73 73065 3 SAVOIE Savoie
82 74 74010 3 HAUTE-SAVOIE Haute-Savoie
11 75 75056 0 PARIS Paris
23 76 76540 3 SEINE-MARITIME Seine-Maritime
11 77 77288 0 SEINE-ET-MARNE Seine-et-Marne
11 78 78646 4 YVELINES Yvelines
54 79 79191 4 DEUX-SEVRES Deux-Sèvres
22 80 80021 3 SOMME Somme
73 81 81004 2 TARN Tarn
73 82 82121 0 TARN-ET-GARONNE Tarn-et-Garonne
52 85 85191 3 VENDEE Vendée
54 86 86194 3 VIENNE Vienne
74 87 87085 3 HAUTE-VIENNE Haute-Vienne
41 88 88160 4 VOSGES Vosges
26 89 89024 5 YONNE Yonne
43 90 90010 0 TERRITOIRE_DE_BELFORT Territoire de Belfort
11 91 91228 5 ESSONNE Essonne
11 92 92050 4 HAUTS-DE-SEINE Hauts-de-Seine
11 93 93008 3 SEINE-SAINT-DENIS Seine-Saint-Denis
11 94 94028 2 VAL-DE-MARNE Val-de-Marne
11 95 95500 2 VAL-D'OISE Val-d'Oise
01 971 97105 3 GUADELOUPE Guadeloupe
02 972 97209 3 MARTINIQUE Martinique
03 973 97302 3 GUYANE Guyane
04 974 97411 0 LA_REUNION La Réunion
06 976 97608 0 MAYOTTE Mayotte
$
$ grep -e '^0' -e 's$' depts2012.txt
93 05 05061 4 HAUTES-ALPES Hautes-Alpes
93 06 06088 4 ALPES-MARITIMES Alpes-Maritimes
21 08 08105 4 ARDENNES Ardennes
25 14 14118 2 CALVADOS Calvados
43 25 25056 2 DOUBS Doubs
73 32 32013 2 GERS Gers
72 40 40192 4 LANDES Landes
31 62 62041 2 PAS-DE-CALAIS Pas-de-Calais
72 64 64445 4 PYRENEES-ATLANTIQUES Pyrénées-Atlantiques
73 65 65440 4 HAUTES-PYRENEES Hautes-Pyrénées
91 66 66136 4 PYRENEES-ORIENTALES Pyrénées-Orientales
11 75 75056 0 PARIS Paris
11 78 78646 4 YVELINES Yvelines
54 79 79191 4 DEUX-SEVRES Deux-Sèvres
41 88 88160 4 VOSGES Vosges
11 93 93008 3 SEINE-SAINT-DENIS Seine-Saint-Denis
01 971 97105 3 GUADELOUPE Guadeloupe
02 972 97209 3 MARTINIQUE Martinique
03 973 97302 3 GUYANE Guyane
04 974 97411 0 LA_REUNION La Réunion
06 976 97608 0 MAYOTTE Mayotte
$
$ grep -n '^11' depts2012.txt
77:11 75 75056 0 PARIS Paris
79:11 77 77288 0 SEINE-ET-MARNE Seine-et-Marne
80:11 78 78646 4 YVELINES Yvelines
93:11 91 91228 5 ESSONNE Essonne
94:11 92 92050 4 HAUTS-DE-SEINE Hauts-de-Seine
95:11 93 93008 3 SEINE-SAINT-DENIS Seine-Saint-Denis
96:11 94 94028 2 VAL-DE-MARNE Val-de-Marne
97:11 95 95500 2 VAL-D'OISE Val-d'Oise
$
$ grep -q '^11' depts2012.txt
$ echo $?
0
$
$ grep -c -e '^0' -e 's$' depts2012.txt
21
$
$ grep COTE depts2012.txt # Sans l'option -w 2 lignes sont affichées
26 21 21231 3 COTE-D'OR Côte-d'Or
53 22 22278 4 COTES-D'ARMOR Côtes-d'Armor
$ grep -w COTE depts2012.txt # Avec l'option -w seule la ligne contenant le mot COTE s'affiche
26 21 21231 3 COTE-D'OR Côte-d'Or
$
$ cat fic7
erytert
e
er
..
uhy
2
e_
34
546
$ grep '..' fic7
erytert
er
..
uhy
e_
34
546
$
$ grep -F '..' fic7
..
$
$ grep -E '^[0-9]+$' << EOF # Sans l'option -x
5
455788
456 657588
elrerioyuerioy
sdgjhg4547457
56456456dgldkgdlfg
EOF
5
455788
$ grep -x -E '[0-9]+' << EOF # Avec l'option -x
5
455788
456 657588
elrerioyuerioy
sdgjhg4547457
56456456dgldkgdlfg
EOF
5
455788
$ cat rech.er
# Rechercher les lignes se terminant par la lettre t
t$
# Rechercher les lignes contenant uniquement des chiffres
^[0-9]+$
$ grep -E -f rech.er fic7
erytert
2
34
546
$
$ ps -ef | grep apache2
root 302 1 0 06:18 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 351 302 0 06:18 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 352 302 0 06:18 ? 00:00:00 /usr/sbin/apache2 -k start
root 3783 3105 0 14:10 pts/0 00:00:00 grep --color=always apache2
$
Dans ce cas, la commande grep apparait également. L'utilisation de 2 tubes est donc nécessaire.
$ ps -ef | grep apache2 | grep -v grep # On demande à grep de ne pas afficher "grep"
root 302 1 0 06:18 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 351 302 0 06:18 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 352 302 0 06:18 ? 00:00:00 /usr/sbin/apache2 -k start
$
$ grep -B 3 rose << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
$
$ grep -A 3 rose << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
$
$ grep -C 1 rose << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
$
Dans le texte suivant, le mot "nécessaire" existe 2 fois
$ grep nécessaire << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Angoisse soulever aventure nécessaire sans installer plante.
Inutile rose nombre nécessaire président en robe.
$ grep -P '(?<=nombre) nécessaire' << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Inutile rose nombre nécessaire président en robe.
$ grep -P 'nécessaire (?=sans)' << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Angoisse soulever aventure nécessaire sans installer plante.
$ grep -P 'nécessaire (?!sans)' << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Inutile rose nombre nécessaire président en robe.
$ grep -P '(?<!nombre) nécessaire' << EOF
Pont entier étroit composer détacher politique terrain.
Angoisse soulever aventure nécessaire sans installer plante.
Plante protéger prochain sentir paysage.
Pierre fort façon loin relation.
Saint accent hasard franchir.
Inutile rose nombre nécessaire président en robe.
Entre mener semaine déposer atteindre professeur rentrer.
Terrible choisir loi subir oser.
Sonner expliquer conduire soldat.
Étendue profond table beau chose.
EOF
Angoisse soulever aventure nécessaire sans installer plante.