Rechercher depuis l’invite de commande Windows

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 ou c).
  • Les plages de listes de caractères [a-z] correspondent à n’importe quelle lettre de a à 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