| ... |
... |
@@ -1,98 +3,134 @@ |
| 1 |
|
-= grep et ses options = |
| 2 |
|
- |
| 3 |
3 |
{{toc/}} |
| 4 |
4 |
|
| 5 |
5 |
== Présentation == |
| 6 |
|
-La commande `grep` (Global Regular Expression Print) permet de **rechercher des chaînes de caractères dans des fichiers** ou en sortie de commande. |
| 7 |
7 |
|
|
5 |
+La commande ##grep## (Global Regular Expression Print) permet de **rechercher des chaînes de caractères dans des fichiers** ou en sortie de commande. |
|
6 |
+ |
| 8 |
8 |
C’est l’outil idéal pour filtrer, explorer, et déboguer du texte dans le terminal. |
| 9 |
9 |
|
| 10 |
|
---- |
|
9 |
+---- |
| 11 |
11 |
|
| 12 |
12 |
== Syntaxe de base == |
|
12 |
+ |
| 13 |
13 |
{{code language="bash"}} |
| 14 |
14 |
grep "motif" fichier.txt |
| 15 |
15 |
{{/code}} |
| 16 |
16 |
|
| 17 |
|
---- |
|
17 |
+---- |
| 18 |
18 |
|
| 19 |
19 |
== Exemples simples == |
| 20 |
|
-Rechercher une ligne contenant `ssh` : |
|
20 |
+ |
|
21 |
+Rechercher une ligne contenant ##ssh## : |
|
22 |
+ |
| 21 |
21 |
{{code language="bash"}} |
| 22 |
22 |
grep ssh /var/log/auth.log |
| 23 |
23 |
{{/code}} |
| 24 |
24 |
|
| 25 |
|
-Afficher les lignes contenant "root" dans un fichier : |
|
27 |
+Afficher les lignes contenant ##root## dans un fichier : |
|
28 |
+ |
| 26 |
26 |
{{code language="bash"}} |
| 27 |
27 |
grep root /etc/passwd |
| 28 |
28 |
{{/code}} |
| 29 |
29 |
|
| 30 |
|
---- |
|
33 |
+---- |
| 31 |
31 |
|
| 32 |
32 |
== Options courantes == |
| 33 |
|
-|= Option |= Description | |
| 34 |
|
-| `-i` | Ignore la casse (maj/min) | |
| 35 |
|
-| `-n` | Affiche le **numéro de ligne** | |
| 36 |
|
-| `-r` ou `-R` | Recherche **récursive** dans les dossiers | |
| 37 |
|
-| `-l` | Affiche seulement les **noms de fichiers** contenant le motif | |
| 38 |
|
-| `-v` | Affiche tout **sauf** les lignes contenant le motif | |
| 39 |
|
-| `--color=auto` | Colore les correspondances dans la sortie | |
| 40 |
|
-| `-e` | Permet de spécifier plusieurs motifs | |
| 41 |
|
-| `-E` | Active les **expressions régulières étendues** (`egrep`) | |
| 42 |
42 |
|
| 43 |
|
---- |
|
37 |
+|=Option|=Description |
|
38 |
+|##-i##|Ignore la casse |
|
39 |
+|##-n##|Affiche le **numéro de ligne** |
|
40 |
+|##-r## ou ##-R##|Recherche **récursive** dans les dossiers |
|
41 |
+|##-l##|Affiche seulement les **noms de fichiers** contenant le motif |
|
42 |
+|##-L##|Affiche les fichiers **ne contenant pas** le motif |
|
43 |
+|##-v##|Affiche tout **sauf** les lignes contenant le motif |
|
44 |
+|##-c##|Compte les lignes correspondantes |
|
45 |
+|##-w##|Cherche le **mot entier** |
|
46 |
+|##-A n## / ##-B n## / ##-C n##|Affiche n lignes **après**, **avant**, ou **autour** |
|
47 |
+|##--color=auto##|Colore les correspondances |
|
48 |
+|##-e##|Permet de spécifier plusieurs motifs |
|
49 |
+|##-E##|Active les **expressions régulières étendues** |
|
50 |
+|##-F##|Traite le motif comme du texte brut, sans expression régulière |
| 44 |
44 |
|
|
52 |
+---- |
|
53 |
+ |
| 45 |
45 |
== Recherche récursive == |
|
55 |
+ |
| 46 |
46 |
{{code language="bash"}} |
| 47 |
47 |
grep -rn "motif" /etc |
| 48 |
48 |
{{/code}} |
| 49 |
49 |
|
| 50 |
|
-Cela affiche les fichiers, numéros de lignes, et lignes contenant le motif dans tout `/etc`. |
|
60 |
+Affiche les fichiers, numéros de lignes, et lignes contenant le motif dans tout ##/etc##. |
| 51 |
51 |
|
| 52 |
|
---- |
|
62 |
+---- |
| 53 |
53 |
|
| 54 |
54 |
== Recherche insensible à la casse == |
|
65 |
+ |
| 55 |
55 |
{{code language="bash"}} |
| 56 |
56 |
grep -i "linux" fichier.txt |
| 57 |
57 |
{{/code}} |
| 58 |
58 |
|
| 59 |
|
---- |
|
70 |
+---- |
| 60 |
60 |
|
| 61 |
61 |
== Exclusion de motif == |
|
73 |
+ |
| 62 |
62 |
{{code language="bash"}} |
| 63 |
63 |
grep -v "erreur" journal.log |
| 64 |
64 |
{{/code}} |
| 65 |
65 |
|
| 66 |
|
-Affiche toutes les lignes **ne contenant pas** le mot "erreur". |
|
78 |
+Affiche toutes les lignes **ne contenant pas** le mot « erreur ». |
| 67 |
67 |
|
| 68 |
|
---- |
|
80 |
+---- |
| 69 |
69 |
|
| 70 |
|
-== Grep avec pipes == |
|
82 |
+== grep avec des tubes == |
|
83 |
+ |
| 71 |
71 |
{{code language="bash"}} |
| 72 |
72 |
ps aux | grep nginx |
| 73 |
73 |
{{/code}} |
| 74 |
74 |
|
| 75 |
|
-Permet de filtrer une sortie de commande. |
|
88 |
+Permet de filtrer une sortie de commande. Le ##grep## lui-même apparaît dans le résultat ; pour l'éviter : |
| 76 |
76 |
|
| 77 |
|
---- |
|
90 |
+{{code language="bash"}} |
|
91 |
+ps aux | grep -v grep | grep nginx |
|
92 |
+# ou |
|
93 |
+pgrep -a nginx |
|
94 |
+{{/code}} |
| 78 |
78 |
|
| 79 |
|
-== grep + regex == |
|
96 |
+---- |
|
97 |
+ |
|
98 |
+== grep et les expressions régulières == |
|
99 |
+ |
|
100 |
+Les caractères ##+##, ##?##, ##|##, ##(## et ##)## ne sont reconnus qu'avec ##-E## : |
|
101 |
+ |
| 80 |
80 |
{{code language="bash"}} |
| 81 |
|
-grep "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+" fichier.txt |
|
103 |
+grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" fichier.txt |
| 82 |
82 |
{{/code}} |
| 83 |
83 |
|
| 84 |
|
-Extrait les lignes contenant des adresses email (simplifié). |
|
106 |
+Extrait les lignes contenant une adresse de courriel (version simplifiée). |
| 85 |
85 |
|
| 86 |
|
---- |
|
108 |
+Quelques motifs utiles : |
| 87 |
87 |
|
| 88 |
|
-== Astuce grep + find == |
| 89 |
|
-Pour rechercher un motif dans tous les fichiers `.log` : |
|
110 |
+|=Motif|=Sens |
|
111 |
+|##^mot##|Ligne commençant par « mot » |
|
112 |
+|##mot$##|Ligne finissant par « mot » |
|
113 |
+|##^$##|Ligne vide |
|
114 |
+|##[0-9]{3}##|Trois chiffres (avec ##-E##) |
|
115 |
+ |
|
116 |
+---- |
|
117 |
+ |
|
118 |
+== Astuce grep et find == |
|
119 |
+ |
|
120 |
+Rechercher un motif dans tous les fichiers ##.log## : |
|
121 |
+ |
| 90 |
90 |
{{code language="bash"}} |
| 91 |
|
-find . -name "*.log" -exec grep -H "erreur" {} \; |
|
123 |
+grep -rn --include="*.log" "erreur" . |
|
124 |
+# ou |
|
125 |
+find . -name "*.log" -exec grep -Hn "erreur" {} + |
| 92 |
92 |
{{/code}} |
| 93 |
93 |
|
| 94 |
|
---- |
|
128 |
+La première forme est plus rapide ; la seconde reste utile quand il faut d'autres critères de ##find##. |
| 95 |
95 |
|
|
130 |
+---- |
|
131 |
+ |
| 96 |
96 |
== Liens internes == |
| 97 |
|
-* [[Retour à la section Tutos Linux>>Wiki Batcave John.TutosLinux]] |
| 98 |
98 |
|
|
134 |
+* [[Retour à la section Tutos Linux>>doc:Wiki Batcave John.TutosLinux.WebHome]] |