Premiers pas avec grep

Rechercher du texte dans un répertoire donné, de manière récursive

Utilisation de grep GNU

grep -r 'pattern' <directory path>

Pour également répertorier les numéros de ligne des correspondances, utilisez l’option -n

grep -rn 'pattern' <directory path>

Pour rechercher uniquement les fichiers avec un motif particulier glob

grep --include='*.txt' -r 'pattern' <directory path>

Exclure les modèles de fichiers ou les répertoires

grep -R --exclude=*.log 'pattern' <directory path>
grep -R --exclude={*.log,*.class} 'pattern' <directory path>

grep -R --exclude-dir=tmp 'pattern' <directory path>
grep -R --exclude-dir={tmp,lib} 'pattern' <directory path>

Notes et autres options utiles

  • <chemin du répertoire> peut être ignoré si la recherche est dans le répertoire courant
  • Les options -R suivent tous les liens symboliques, contrairement à -r qui ne suit les liens symboliques que s’ils sont sur le command line
  • -l pour ne lister que les fichiers correspondants
  • -h pour supprimer le préfixe du nom de fichier
  • --color=auto pour mettre en surbrillance les motifs correspondants
  • -m <num> pour spécifier le nombre maximum de correspondances pour chaque entrée de fichier

Solution de contournement POSIX pour effectuer une recherche récursive

find <directory path> -type f -exec grep -l 'pattern' {} +
  • Des options telles que -n , -l , etc. peuvent être utilisées selon les besoins
  • Si {} + n’est pas pris en charge, utilisez {} \; à la place
  • Voir la documentation find pour plus d’aide sur la commande find comme comment inclure/exclure les types de fichiers, les répertoires, etc.

Utilisation de base

Ignorer la casse

Soit un fichier sample :

hello
Hello
HELLO_there

Un grep normal pour “hello” renvoie :

$ grep "hello" sample 
hello

L’utilisation de -i permet d’ignorer la casse et de faire correspondre n’importe quel “hello”:

$ grep -i "hello" sample
hello
Hello
HELLO_there

## Reconnaître des mots entiers Soit un fichier sample :

hello world
ahello here
hello_there

Un grep normal pour “hello” renvoie :

$ grep hello sample 
hello world
ahello here
hello_there

L’utilisation de -w permet de sélectionner les lignes contenant des correspondances qui forment des mots entiers :

$ grep -w hello sample 
hello world

Contrôle de contexte Grep

Soit un fichier Sample nommé movieslist.

Troy
Gladiator
Robin Hood
King Arthur
BraveHeart
The Last Samurai

retours grep normaux

grep "Gladiator" movieslist
Gladiator

Maintenant, utilisez grep pour imprimer les lignes ci-dessous ou au-dessus du fichier.

Pour imprimer la ligne ci-dessous

grep -A 1 Gladiator movieslist 
Gladiator
Robin Hood

Pour imprimer la ligne ci-dessus

grep -B 1 Gladiator movieslist 
Troy
Gladiator

Pour imprimer les deux

grep -C 1 Gladiator movieslist 
Troy
Gladiator
Robin Hood

N’imprime que la partie correspondante des lignes

echo "Prints only the matching part of the lines" | grep -o "matching"
# prints matching