152 lines
3.7 KiB
Markdown
152 lines
3.7 KiB
Markdown
# grep
|
|
|
|
|
|
|
|
La commande **grep** permet de rechercher une chaîne de caractères dans un fichier.
|
|
|
|
macOS intègre la version BSD de grep
|
|
|
|
```bash
|
|
$ grep -V
|
|
grep (BSD grep) 2.5.1-FreeBSD
|
|
```
|
|
mais peut aussi utiliser la version GNU grâce à Homebrew (rebaptiser ggrep)
|
|
```bash
|
|
$ ggrep -V
|
|
ggrep (GNU grep) 3.6
|
|
Packaged by Homebrew
|
|
```
|
|
|
|
|
|
|
|
Options ([toutes les options](grep-options-fr.md))([US](grep-options.md)):
|
|
|
|
```bash
|
|
-E, --extended-regexp interprète la PATTERN comme Expression Régulière Etendue
|
|
-F, --fixed-strings interprète la PATTERN comme chaine
|
|
-G, --basic-regexp interprète la PATTERN comme chaine Expression Régulière Basique
|
|
-P, --perl-regexp interprète la PATTERN comme Expression Régulière PERL (PCRE)
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
-i, --ignore-case insensible à la casse
|
|
-v affiche les lignes ne contenant pas la chaîne
|
|
-w, --word-regexp recherche le mot correspondant exactement à la chaîne
|
|
-x, --line-regexp recherche ligne correspondant exactement à la chaîne
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
-c, --count compte le nombre de lignes contenant le fichier / chaîne (associé à -v)
|
|
--color (never|always|auto) met en couleur les concordances
|
|
-l, --files-with-matches affiche le nom des fichiers qui contiennent la chaîne
|
|
-m NUM, --max-count NUM stoppe la lecture du fichier après avoir trouvé NUM lignes
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
-n, --line-number chaque ligne contenant la chaîne est numérotée
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
-C NUM, --context=NUM fait figurer les NUM lignes qui précèdent et suivent la ligne où figure le mot recherché
|
|
-A NUM, --after-context=NUM affiche les NUM lignes qui suivent la ligne où figure le mot recherché
|
|
-B NUM, --before-context=NUM affiche les NUM lignes qui précèdent la ligne où figure le mot recherché
|
|
-r (recursif)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
|
|
```
|
|
|
|
<u>Chercher dans un dossier (récursif)</u>:
|
|
|
|
```bash
|
|
grep -r "brew" ./docs/
|
|
./docs//Divers/plex.md: $ brew install mono
|
|
|
|
# N'affiche que les fichiers (-l):
|
|
grep -l -r "brew" ./docs/
|
|
./docs//Divers/plex.md
|
|
./docs//macos/node-js.md
|
|
|
|
root@localhost:/etc# grep -r 'max_allowed_packet' ./mysql/
|
|
./mysql/conf.d/mysqldump.cnf:max_allowed_packet = 16M
|
|
./mysql/mariadb.conf.d/50-server.cnf:max_allowed_packet = 16M
|
|
```
|
|
|
|
|
|
|
|
<u>Chercher dans tous les fichiers 'php' ou 'html' (et ignorer les dossiers '.git'):</u>
|
|
|
|
```bash
|
|
grep pattern $(find . -name '*.php' -or -name '*.html' | grep -v .git)
|
|
```
|
|
|
|
|
|
|
|
<u>Regex:</u>
|
|
|
|
```bash
|
|
grep -E ^a toto.txt
|
|
```
|
|
|
|
L'option -E est optionnelle (compatibilité).
|
|
|
|
| Caractère spécial | Signification |
|
|
| ----------------- | ------------------------------------------------------------ |
|
|
| `.` | Caractère quelconque |
|
|
| `^` | Début de ligne |
|
|
| `$` | Fin de ligne |
|
|
| `[]` | Un des caractères entre les crochets |
|
|
| `?` | L'élément précédent est optionnel (peut être présent 0 ou 1 fois) |
|
|
| `*` | L'élément précédent peut être présent 0, 1 ou plusieurs fois |
|
|
| `+` | L'élément précédent doit être présent 1 ou plusieurs fois |
|
|
| `|` | Ou |
|
|
| `()` | Groupement d'expressions |
|
|
|
|
Lignes commençant par les caractères compris entre a et d:
|
|
|
|
```bash
|
|
grep ^[a-d] fichier.txt
|
|
```
|
|
|
|
|
|
|
|
Rechercher plusieurs chaines:
|
|
|
|
```bash
|
|
grep -E 'alias|function' ~/.zshrc
|
|
```
|
|
|
|
```bash
|
|
grep -e alias -e function ~/.zshrc
|
|
```
|
|
|
|
ou passer un fichier de motifs à grep:
|
|
|
|
```bash
|
|
cat motif.txt
|
|
|
|
grep -f "motif.txt" fichier.txt
|
|
```
|
|
|
|
|
|
|
|
Afficher les 5 lignes qui suivent le motif recherché:
|
|
|
|
```bash
|
|
grep 'toto' -A5 fichier.txt
|
|
```
|
|
|