# grep La commande **grep** permet de rechercher une chaîne de caractères dans un fichier. Options: ```bash -i (ignore case) insensible à la casse -v affiche les lignes ne contenant pas la chaîne -c (count) compte le nombre de lignes contenant la chaîne -n (number) chaque ligne contenant la chaîne est numérotée -x ligne correspondant exactement à la chaîne -l affiche le nom des fichiers qui contiennent la chaîne -C (context) fait figurer les deux lignes qui précèdent et suivent la ligne où figure le mot recherché -Ax (after) affiche les x lignes qui suivent la ligne où figure le mot recherché -Bx (before) affiche les x lignes qui précèdent la ligne où figure le mot recherché -r (recursif) -w mot exact ``` Chercher dans un dossier (récursif): ```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 ``` Chercher dans tous les fichiers 'php' ou 'html' (et ignorer les dossiers '.git'): ```bash grep pattern $(find . -name '*.php' -or -name '*.html' | grep -v .git) ``` Regex: ```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 'tata|toto' fichier.txt ``` 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 ```