findstr : rechercher du texte dans les fichiers sous Windows
Sous Windows, quand on cherche du texte à l’intérieur de fichiers depuis l’invite de commandes, l’outil de référence est findstr. C’est l’équivalent Windows du célèbre grep d’Unix : il parcourt un ou plusieurs fichiers et affiche les lignes contenant un motif donné. Précieux pour fouiller des logs, retrouver une chaîne dans du code ou filtrer la sortie d’une autre commande, findstr a toutefois ses particularités — et quelques pièges bien à lui qu’il vaut mieux connaître.
Ce guide complet présente findstr : sa syntaxe, ses options les plus utiles, sa gestion (limitée) des expressions régulières, ses pièges classiques, et une comparaison avec grep pour ceux qui naviguent entre Windows et Linux. Les exemples sont neutres et réutilisables.
La syntaxe de base
Dans sa forme la plus simple, findstr prend un motif à chercher et un fichier :
findstr "erreur" journal.txt
Cette commande affiche toutes les lignes du fichier journal.txt contenant le mot « erreur ». Par défaut, la recherche est sensible à la casse : « Erreur » et « erreur » sont considérés comme différents (on verra comment changer ce comportement).
findstr lit aussi depuis un tube (pipe), ce qui permet de filtrer la sortie d’une autre commande — un usage très fréquent :
ipconfig | findstr "IPv4"
Ici, on ne garde que les lignes de la configuration réseau contenant « IPv4 ». C’est l’une des utilisations les plus pratiques de findstr au quotidien.
Un piège dès le départ : l’espace signifie « OU »
Voici la particularité de findstr qui surprend le plus, et qu’il faut absolument comprendre. Par défaut, un espace dans le motif est interprété comme un « OU » logique. Autrement dit :
findstr "erreur critique" journal.txt
ne cherche pas la phrase « erreur critique », mais toutes les lignes contenant « erreur » ou « critique ». C’est une source de confusion majeure pour qui vient de grep.
Pour chercher une phrase exacte contenant des espaces, il faut utiliser l’option /C: qui traite le motif comme une chaîne unique :
findstr /C:"erreur critique" journal.txt
Retenez cette règle : dès que votre motif contient un espace et que vous voulez le chercher tel quel, préfixez-le par /C:.
Les options les plus utiles
Toutes les options de findstr se placent avant le motif et le nom de fichier. Voici les plus employées.
Ignorer la casse : /I
L’option /I rend la recherche insensible à la casse, trouvant « erreur », « Erreur » et « ERREUR » :
findstr /I "erreur" journal.txt
Rechercher récursivement : /S
L’option /S étend la recherche au dossier courant et à tous ses sous-dossiers — indispensable pour fouiller une arborescence :
findstr /S "TODO" *.txt
Cette commande cherche « TODO » dans tous les fichiers .txt, à tous les niveaux de l’arborescence à partir du dossier courant.
Afficher les numéros de ligne : /N
L’option /N préfixe chaque ligne trouvée par son numéro dans le fichier — pratique pour localiser précisément une occurrence :
findstr /N "erreur" journal.txt
N’afficher que les noms de fichiers : /M
Quand on cherche dans de nombreux fichiers, l’option /M n’affiche que les noms des fichiers contenant le motif, sans les lignes elles-mêmes :
findstr /M /S "config" *.ini
Inverser la recherche : /V
L’option /V affiche les lignes qui ne contiennent pas le motif — utile pour éliminer du bruit :
findstr /V "DEBUG" journal.txt
Combiner les options
Les options se combinent naturellement. Par exemple, pour chercher « erreur » sans tenir compte de la casse, récursivement, en affichant les numéros de ligne :
findstr /I /S /N "erreur" *.log
Les expressions régulières avec /R
findstr accepte des expressions régulières via l’option /R. Quelques métacaractères sont disponibles :
.: n’importe quel caractère ;*: zéro ou plusieurs fois le caractère précédent ;^: début de ligne ;$: fin de ligne ;[abc]: un caractère parmi l’ensemble ;[^abc]: un caractère absent de l’ensemble ;\<et\>: début et fin de mot.
Par exemple, pour trouver les lignes commençant par « Attention » :
findstr /R "^Attention" journal.txt
Ou les lignes se terminant par un point-virgule :
findstr /R ";$" fichier.txt
Les limites des expressions régulières
C’est un point important à connaître, car il déçoit souvent : la gestion des expressions régulières par findstr est très limitée comparée à celle de grep. Concrètement, findstr ne prend pas en charge :
- l’alternation avec la barre verticale
|(pour cela, on utilise l’astuce de l’espace comme « OU », ou plusieurs motifs) ; - les classes abrégées comme
\d(chiffres) ou\w(caractères de mot) ; - les quantificateurs
+(une ou plusieurs fois) et{n}(n fois) ; - l’opérateur
?(zéro ou une fois) ; - les groupes
\( \).
Autre piège documenté : les plages de caractères comme [A-Z] ne se comportent pas comme ailleurs. À cause d’un ordre de tri particulier, [A-Z] peut inclure des minuscules et des caractères accentués, ce qui donne des résultats inattendus. Enfin, findstr gère mal les caractères Unicode / UTF-8 : il travaille dans un jeu de caractères hérité de MS-DOS, ce qui le rend peu fiable pour du texte non anglais.
En résumé : findstr convient très bien pour des recherches simples, mais pour des motifs complexes, il montre vite ses limites.
findstr comparé à grep
Pour qui connaît le monde Unix, findstr est l’analogue de grep, mais avec des différences notables. Le tableau suivant met en regard les principales options.
| Fonction | findstr (Windows) | grep (Unix/Linux) |
|---|---|---|
| Recherche de base | findstr "mot" f.txt |
grep "mot" f.txt |
| Ignorer la casse | /I |
-i |
| Récursif | /S |
-r |
| Numéros de ligne | /N |
-n |
| Noms de fichiers seuls | /M |
-l |
| Inverser | /V |
-v |
| Expression régulière | /R |
(par défaut) |
| Chaîne littérale | /L ou /C: |
-F |
| Alternation « ou » | espace (ou plusieurs motifs) | | avec -E |
La différence de fond : grep dispose d’un moteur d’expressions régulières complet et puissant, là où findstr se limite à un sous-ensemble. Pour des recherches quotidiennes simples, les deux se valent ; pour des motifs élaborés, grep reste très supérieur. Si vous voulez découvrir toute la puissance de son équivalent Unix, notre guide dédié à la commande grep détaille ses nombreuses possibilités.
Pièges et bonnes pratiques
Quelques réflexes pour éviter les erreurs les plus courantes avec findstr :
L’espace = OU. Le piège numéro un, on l’a vu : pour chercher une phrase exacte avec des espaces, utilisez /C:"votre phrase", sinon chaque mot est cherché séparément.
Les guillemets sont obligatoires. Entourez toujours le motif de guillemets doubles, surtout s’il contient des espaces ou des caractères spéciaux.
L’ordre des arguments. Les options (/I, /S…) doivent précéder le motif et le nom de fichier, sinon findstr ne les prend pas en compte.
Ne pas attendre les regex de grep. Pas de |, pas de \d, pas de + : si votre motif en a besoin, il faut le contourner ou envisager PowerShell, dont l’applet Select-String offre des expressions régulières complètes.
Le texte non anglais. Pour des fichiers en UTF-8 ou contenant des accents, méfiez-vous : findstr peut ne pas trouver ce qu’on attend. PowerShell est alors plus adapté.
En résumé
findstr est l’outil de recherche de texte de l’invite Windows, à connaître pour qui travaille en ligne de commande :
- recherche de base
findstr "motif" fichier, et en fin de tube pour filtrer une sortie ; - options clés :
/I(casse),/S(récursif),/N(numéros),/M(noms de fichiers),/V(inverser) ; /C:pour une phrase exacte — car l’espace signifie « OU » par défaut ;/Rpour les expressions régulières, mais avec des limites importantes (pas de|,\d,+…) ;- c’est l’équivalent Windows de
grep, en plus limité.
Pour des recherches simples et rapides, findstr fait parfaitement le travail. Dès que les besoins se complexifient — motifs élaborés, texte multilingue — mieux vaut se tourner vers PowerShell ou, sous Unix, vers grep. Mais pour dépanner en deux secondes depuis une invite Windows, c’est un réflexe qui rend bien des services.
Vous jonglez entre Windows et Linux ? Garder en tête la correspondance findstr / grep évite bien des hésitations — les deux partagent la même logique, seules les options changent de forme.