Le Commande FIND
Pour rechercher du texte dans plusieurs fichiers à partir de l’invite de commande Windows ou dans des fichiers batch, vous pouvez utiliser la commande FIND, qui existe depuis les jours de MS DOS et est toujours disponible dans Windows 11. Elle est similaire à la commande Unix grep
, mais ne prend pas en charge les expressions régulières. Si vous souhaitez rechercher le mot borogoves
dans le répertoire actuel, veuillez suivre cette syntaxe:
find "borogoves" *
Notez que les guillemets doubles autour du motif sont obligatoires. Si vous utilisez PowerShell, vous devrez également inclure des guillemets simples:
find '"borogoves"' *
Au lieu de l’astérisque (*
), vous pouvez spécifier un masque de fichier tel que *.htm?
. La commande find
affiche les noms des fichiers qu’elle scanne, même s’il n’y a aucun match dans ces fichiers:
La recherche est sensible à la casse par défaut, donc vous devez généralement ajouter l’interrupteur /I
pour traiter les lettres majuscules et minuscules comme équivalentes:
find /I "<a href=" *.htm
Si vous ne spécifiez pas le fichier à rechercher, find
attendra l’entrée de texte depuis stdin, afin que vous puissiez canaliser la sortie d’une autre commande. Par exemple, vous pouvez lister toutes les commandes de copie prises en charge sous Windows:
help | find /i "copy"
Un autre commutateur, /V
, vous permet de trouver toutes les lignes ne contenant pas le motif, semblable à la commande grep -v
.
Dans fichiers batch, vous pouvez utiliser le fait que la commande find
définit le code de sortie (errorlevel) à 1 si le motif n’est pas trouvé. Par exemple, vous pouvez vérifier si la machine exécute une version 64 bits ou 32 bits de Windows:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
La commande FINDSTR : Recherche par Expression Régulière
Si vous avez besoin de rechercher une expression régulière, essayez la commande FINDSTR
, introduite sous Windows XP. Pour des raisons historiques, findstr
prend en charge un sous-ensemble limité d’expressions régulières, vous ne pouvez donc utiliser que ces fonctionnalités regex suivantes :
- Le point
.
correspond à n’importe quel caractère sauf à la nouvelle ligne et aux caractères ASCII étendus. - Les listes de caractères
[abc]
correspondent à l’un des caractères spécifiés (a
,b
ouc
). - Les plages de listes de caractères
[a-z]
correspondent à n’importe quelle lettre dea
àz
. - L’astérisque (
*
) indique que le caractère précédent peut être répété zéro ou plusieurs fois. - Les symboles
\<
et\>
marquent le début et la fin d’un mot. - Le signe dièse (
^
) et le signe dollar ($
) désignent le début et la fin d’une ligne. - Le backslash (
\
) échappe tout caractère de métacaractère, vous permettant de trouver des caractères littéraux. Par exemple,\$
trouve le signe dollar lui-même.
Findstr ne prend pas en charge les classes de caractères (\d
), l’alternative (|
), ou d’autres répétitions (+
ou {5}
).
La syntaxe de base est la même que pour la commande FIND
:
findstr "\<20[0-9][0-9]\>" *.htm
Cette commande trouve tous les années commençant par 2000 dans les fichiers .htm
du répertoire courant. Tout comme avec find
, utilisez l’interrupteur /I
pour une recherche insensible à la casse :
Limitations et bizarreries de FINDSTR
Les listes de caractères [a-z]
sont toujours insensibles à la casse, donc echo ABC | findstr "[a-z]"
correspond.
Le caractère espace fonctionne comme le caractère méta d’alternative dans findstr
, donc une requête de recherche comme findstr "new shoes" *
trouvera toutes les lignes contenant soit new
soit shoes
. Malheureusement, il n’y a aucun moyen d’échapper l’espace et de l’utiliser comme caractère littéral dans une expression régulière. Par exemple, vous ne pouvez pas trouver des lignes commençant par un espace.
Erreurs de syntaxe dans l’expression régulière sont ignorées. Par exemple, findstr "[" *
correspondra à toutes les lignes contenant le caractère [
.
Si le fichier contient des sauts de ligne Unix (LF), le caractère méta $
ne fonctionne pas correctement. Si la dernière ligne d’un fichier manque d’un séparateur de ligne, findstr
sera incapable de la trouver. Par exemple, findstr "</html>$" *
ne fonctionnera pas s’il n’y a pas de CR+LF après </html>.
Les premières versions de Windows avaient des limitations en termes de longueur de ligne pour les commandes find
et findstr
, ainsi que pour d’autres commandes. Les versions récentes ont levé ces limites, vous n’avez donc plus à vous en préoccuper. Voir cette question StackOverflow pour les limitations et bugs de findstr
, en particulier dans les premières versions de Windows.
La commande findstr fonctionne dans le jeu de caractères OEM (MS DOS); le caractère point-virgule ne correspond à aucun des caractères ASCII étendus. En conséquence, la commande est peu utile pour les textes non anglais. De plus, vous ne pouvez pas rechercher des caractères Unicode (UTF-8 ou UTF-16).
Conclusion
Vous pouvez en apprendre davantage sur les autres commutateurs en tapant findstr /?
ou find /?
. Par exemple, les commutateurs supplémentaires vous permettent de rechercher dans les sous-répertoires ou d’imprimer des numéros de ligne. Vous pouvez également vous référer à la documentation officielle.
En général, les commandes find
et findstr
sont dépassées et présentent diverses bizarreries et limitations.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt