Apprenez en lisant dans l'ordre

Recherche de texte — grep

Apprends les bases pour trouver les lignes contenant une chaîne, plus quand utiliser -i pour ignorer la casse, -n pour les numéros de ligne, et -r pour la recherche récursive — tout en pratique dans un terminal en navigateur.

Trouver une chaîne — grep

grep est la commande qui extrait et affiche uniquement les lignes d'un fichier contenant une chaîne donnée.

Utilise-la comme grep chaîne-recherchée fichier, et si des lignes correspondent, elles s'affichent telles quelles à l'écran.

Utilise-la pour trouver juste les lignes dont tu as besoin dans un long log.

grep extrait uniquement les lignes correspondantes
applebananacherrygrep banana fruits.txtaffiche uniquementbanana correspondantles autres lignesn'apparaissent pas
grep extrait uniquement les lignes contenant la chaîne donnée, et ne produit pas le reste.
echo 'error: disk full' > log.txt   # crée la ligne 1
echo 'info: started' >> log.txt     # ajoute
echo 'error: timeout' >> log.txt    # ajoute
grep error log.txt                  # les 2 lignes contenant error
grep info log.txt                   # la 1 ligne contenant info

① Crée la ligne 1 avec echo 'error: disk full' > log.txt, puis ajoute avec echo 'info: started' >> log.txt et echo 'error: timeout' >> log.txt pour faire un fichier de 3 lignes.

② Utilise grep pour afficher uniquement les lignes de log.txt contenant error.

③ Confirme que chaque ligne affichée contient bien error. (Lance-le correctement et une explication apparaîtra.)

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

Ignorer la casse — -i / Numéros de ligne — -n

grep distingue les majuscules des minuscules.

Ajoute -i pour chercher sans cette distinction, afin de capturer à la fois Error et error.

Ajoute -n et le numéro de ligne s'affiche devant chaque ligne correspondante, pour savoir où elle se trouve dans le fichier.

-i et -n peuvent être combinés et appliqués à la fois, comme grep -in error app.txt.

OptionSignificationExemple
-iNe pas distinguer majuscules et minusculesgrep -i error log.txt
-nAjouter un numéro de ligne devant chaque correspondancegrep -n error log.txt
-vAfficher les lignes qui ne correspondent pasgrep -v info log.txt
-rRechercher dans un répertoire récursivementgrep -r TODO src
echo 'Error in disk' > app.txt   # crée la ligne 1
echo 'error in app' >> app.txt   # ajoute
echo 'ok' >> app.txt             # ajoute
grep -i error app.txt            # les 2 lignes Error et error
grep -n error app.txt            # 2:error in app (avec numéro de ligne)

① Crée la ligne 1 avec echo 'Error in disk' > app.txt, puis ajoute avec echo 'error in app' >> app.txt et echo 'ok' >> app.txt pour faire un fichier avec casse mixte.

② Cherche d'abord error avec grep et l'option qui ignore la casse, et confirme que la ligne Error est également capturée.

③ Ensuite lance la même recherche avec l'option qui affiche les numéros de ligne, et confirme qu'un numéro de ligne apparaît devant chaque correspondance.

Linux console
0 / 5 exécutée(s)
Loading Linux Terminal...

Exclure les lignes non correspondantes — -v

Ajoute -v et grep affiche les lignes qui ne contiennent pas la chaîne donnée.

Alors que le grep ordinaire garde les lignes correspondantes, -v supprime les lignes correspondantes et affiche le reste.

Utilise-le quand tu veux lire un log avec les lignes inutiles (comme info ou debug) supprimées.

grep -v garde les lignes non correspondantes
error: disk fullinfo: startederror: timeoutgrep -v info log.txtles lignes infosont excluesaffiche les 2 ligneserror restantes
-v exclut les lignes contenant la chaîne donnée et n'affiche que le reste.
echo 'error: disk full' > log.txt   # crée la ligne 1
echo 'info: started' >> log.txt     # ajoute
echo 'error: timeout' >> log.txt    # ajoute
grep -v info log.txt                # les 2 lignes qui ne contiennent pas info

① Crée la ligne 1 avec echo 'error: disk full' > log.txt, puis ajoute avec echo 'info: started' >> log.txt et echo 'error: timeout' >> log.txt pour faire un fichier de 3 lignes.

② Utilise grep avec l'option qui garde les lignes non correspondantes pour afficher uniquement les lignes de log.txt qui ne contiennent pas info.

③ Confirme que les lignes affichées sont les 2 lignes error et que la ligne info a disparu.

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...

Chercher dans un répertoire récursivement — -r

Quand tu veux chercher non pas dans un seul fichier mais dans tous les fichiers d'un répertoire, ajoute -r et passe un répertoire au lieu d'un nom de fichier.

Il descend dans les sous-répertoires récursivement et affiche les lignes correspondantes sous la forme fichier:ligne.

grep -r parcourt un répertoire récursivement
grep -r TODO srcsrc/src/a.txtTODO: fix latersrc/sub/src/sub/b.txtTODO: review
grep -r part du src passé et descend dans le sous-répertoire src/sub pour chercher dans chaque fichier.
mkdir -p src/sub                       # crée le répertoire de travail
echo 'TODO: fix later' > src/a.txt     # 1 fichier dans le répertoire parent
echo 'TODO: review' > src/sub/b.txt    # 1 fichier dans le sous-répertoire
grep -r TODO src                       # recherche récursive sous src

① Crée une arborescence avec un sous-répertoire en utilisant mkdir -p src/sub.

② Avec echo 'TODO: fix later' > src/a.txt et echo 'TODO: review' > src/sub/b.txt, crée des fichiers dans le répertoire parent et dans le sous-répertoire.

③ Cherche TODO sous le répertoire src avec grep et l'option de recherche récursive, et confirme que les lignes des deux fichiers apparaissent.

Linux console
0 / 4 exécutée(s)
Loading Linux Terminal...
QUIZ

Vérification des connaissances

Répondez à chaque question une par une.

Question 1Qu'est-ce qui s'affiche quand tu lances grep error log.txt ?

Question 2Quelle option ajoutes-tu à grep pour chercher sans distinguer majuscules et minuscules ?

Question 3Comment grep se comporte-t-il quand tu ajoutes -r et passes un répertoire ?