Débloquez la puissance de ces équivalents de grep sous Windows

Fatigué d’utiliser les mêmes vieux outils de recherche sur votre machine, comme grep ? Pourquoi se contenter de ça ? De nombreux équivalents de grep dans Windows peuvent vous aider à rechercher précisément ce que vous cherchez.

Dans ce tutoriel, vous apprendrez comment ces équivalents de grep rendent possible la recherche dans les fichiers plus rapide et vous permettent de trouver l’information dont vous avez besoin en un clin d’œil.

Restez à l’écoute et liez-vous d’amitié avec des outils de recherche puissants !

Prérequis

Ce tutoriel comprend des démonstrations pratiques. Pour suivre, assurez-vous d’avoir les éléments suivants en place :

  • A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
  • PowerShell – Ce tutoriel utilise PowerShell 7.2.8.
  • scoop – Ce tutoriel utilise scoop v0.3.1.

Recherche de Chaînes de Texte Spécifiques (findstr) Dans les Fichiers

Pouvoir repérer instantanément des chaînes de texte spécifiques (avec des motifs particuliers) que vous cherchez dans un fichier aide grandement votre flux de travail. Mais comment ? Tournez-vous vers l’utilitaire en ligne de commande findstr dans Windows, qui vous permet de rechercher des chaînes de texte spécifiques dans les fichiers.

findstr est souvent utilisé comme équivalent de grep sous Windows, car il a des fonctionnalités similaires à la commande Unix grep. Quels sont les avantages d’utiliser findstr? Un exemple est qu’il est intégré à tout système d’exploitation Windows (OS) — aucun logiciel supplémentaire n’est requis.

Pour trouver des chaînes spécifiques dans un fichier, suivez ces étapes:

Créez un fichier texte avec votre éditeur de texte préféré, nommez-le notes.txt, et peuplez le contenu ci-dessous dans le fichier.

Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.

Maintenant, ouvrez PowerShell en tant qu’administrateur et exécutez la commande ci-dessous pour trouver des chaînes (findstr) correspondant au motif de recherche (”apple") dans le fichier notes.txt.

? findstr dispose de nombreux paramètres qui peuvent être utilisés pour personnaliser la recherche. Mais dans ce tutoriel, vous explorerez certains des paramètres les plus précieux lors de la recherche de chaînes dans les fichiers.

findstr "apple" "C:\\myfiles\\notes.txt
Searching text strings with the word apple in it

? Peut-être recherchez-vous des chaînes dans plusieurs fichiers. Si c’est le cas, spécifiez les chemins des fichiers séparés par des espaces, comme ci-dessous: findstr parameters "pattern" "C:\\chemin\\vers\\fichier1.txt" "C:\\chemin\\vers\\fichier2.txt"

Recherche de chaînes correspondant à un motif spécifique ou littéral

Lorsque vous travaillez avec des fichiers de configuration, trouver des chaînes dans un motif spécifique ou littéral est crucial, surtout lors du débogage. Heureusement, le paramètre /c indique à la commande findstr de rechercher des chaînes littérales qui correspondent à un motif spécifié, y compris les espaces ou les caractères spéciaux.

Ajouter le paramètre /c à la commande findstr s’avère pratique dans les situations suivantes, mais sans s’y limiter :

  • Recherche d’une phrase spécifique ou d’un ensemble de mots apparaissant dans un ordre particulier.
  • Recherche d’une chaîne contenant des espaces ou des caractères spéciaux.

Pour voir comment le paramètre /c fonctionne en action, suivez ces étapes :

1. Exécutez la commande findstr ci-dessous pour rechercher la chaîne littérale (/c) banane cerise dans le fichier *notes.txt*.

findstr /c:"banana cherry" "C:\myfiles\notes.txt"

Dans la sortie ci-dessous, la commande findstr ne renvoie que les lignes contenant la chaîne exacte banane cerise avec un espace entre les deux mots.

N’oubliez pas que le paramètre /c est sensible à la casse, donc la commande findstr ne renvoie que la chaîne avec la casse exacte que vous avez spécifiée. Si aucune des chaînes dans le fichier notes.txt ne correspond au motif spécifié, la commande findstr renvoie une sortie vide.

Searching for a literal string

2. Ensuite, ajoutez la ligne suivante au fichier notes.txt, et enregistrez les modifications.

À ce stade, il devrait y avoir deux lignes dans votre fichier notes.txt avec la chaîne « hello ». Une en minuscules (hello, world.), et une autre avec un ‘H’ en majuscule (Hello, world.).

hello, world.

3. Maintenant, exécutez chaque commande ci-dessous pour rechercher la chaîne littérale hello, world, ou Hello, world dans le fichier notes.txt.

# Modèle entièrement en minuscules
findstr /c:"hello, world" "C:\myfiles\notes.txt"
# Avec la lettre majuscule 'H'
findstr /c:"Hello, world" "C:\myfiles\notes.txt"

Remarquez ci-dessous que, peu importe qu’il y ait deux lignes contenant la chaîne ‘hello, world’ dans le fichier notes.txt, vous n’obtenez qu’une seule ligne de chaîne.

Le paramètre /c indique à la commande findstr d’imprimer les lignes contenant la chaîne ‘hello, world’ avec soit des minuscules soit une majuscule ‘H’.

Searching for the ‘hello, world’ literal string with the lowercase ‘h’

4. Enfin, exécutez la commande findstr ci-dessous pour rechercher les chaînes contenant le motif hello dans le fichier notes.txt tout en ignorant (/i) la casse des lettres.

Les recherches sensibles à la casse fonctionnent bien si vous connaissez déjà la casse réelle de la chaîne que vous recherchez. Mais si vous souhaitez voir toutes les lignes de chaînes qui correspondent à un motif indépendamment de la casse des lettres, le paramètre /i fera l’affaire.

findstr /i "hello" "C:\myfiles\notes.txt"
Searching strings while Ignoring the letter case

Recherche de chaînes spécifiées dans les fichiers et répertoires

Outre la recherche de chaînes spécifiques dans les fichiers, la commande findstr vous permet de rechercher des chaînes correspondantes dans les fichiers, répertoires et sous-répertoires.

Supposons que vous souhaitiez trouver tous les fichiers dans un répertoire qui contiennent un mot spécifique dans leur contenu. Si tel est le cas, laissez le paramètre /s faire le travail sale.

Exécutez la commande ci-dessous pour rechercher (/s) dans le répertoire actuel et ses sous-répertoires (/s) tous les fichiers (*.*) qui contiennent la chaîne system, en ignorant la casse des lettres (-i)

N’oubliez pas que cette commande ne recherche que les fichiers qui contiennent la chaîne system en tant que mot entier et non ceux qui font partie de mots plus grands, tels que systématique ou systématiser.

findstr /s /i system *.*

La sortie ci-dessous montre une liste de noms de fichiers, un par ligne, avec le nom de chaque fichier contenant la chaîne ‘system’.

Finding specified strings within files, directories, and subdirectories

Recherche de chaînes à l’aide du cmdlet Select-String

Jusqu’à présent, vous avez vu que la commande findstr fonctionne parfaitement pour trouver des chaînes, mais le cmdlet Select-String ne doit pas être négligé. Ce cmdlet est l’équivalent de grep sur Windows, vous permettant de rechercher des motifs de texte spécifiques dans des fichiers et des chaînes.

Le cmdlet Select-String est conçu pour l’efficacité, vous permettant de rechercher rapidement à travers de grandes quantités de texte, et prend en charge les expressions régulières (regex). À son tour, ce cmdlet vous permet de rechercher des motifs encore plus complexes que findstr

Pour voir comment fonctionne la cmdlet Select-String, suivez ces étapes :

1. Ouvrez d’abord le fichier notes.txt, ajoutez les lignes suivantes et enregistrez les modifications.

L’ajout de ces lignes est une préparation pour démontrer comment la cmdlet Select-String gère la casse des lettres dans les étapes suivantes.

Apple
APPLE
ApplE

2. Ensuite, exécutez la commande suivante pour rechercher la chaîne apple dans le fichier notes.txt.

Select-String -Pattern "apple" -Path "C:\myfiles\notes.txt"

Ci-dessous, plusieurs lignes contiennent la chaîne « apple » mais avec des cas de lettres différents puisque la cmdlet Select-String est insensible à la casse. Mais la bonne chose est que vous pouvez facilement repérer et vérifier les chaînes correspondantes car elles sont mises en évidence.

Searching for a string in a text file

? Peut-être souhaitez-vous utiliser une simple correspondance de chaînes au lieu d’une correspondance regex. Si c’est le cas, ajoutez le paramètre -SimpleMatch, comme indiqué ci-dessous, et ne vous souciez jamais de la syntaxe regex et des caractères spéciaux. Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch

3. Maintenant, exécutez la commande ci-dessous pour rechercher APPLE dans le fichier notes.txt avec la sensibilité à la casse activée (-CaseSensitive). Le paramètre -CaseSensitive est utile pour une précision de recherche.

Select-String -Pattern 'APPLE' -Path "C:\myfiles\notes.txt" -CaseSensitive

Comme vous pouvez le voir ci-dessous, la seule correspondance trouvée a la casse exacte que vous avez spécifiée (APPLE).

Searching for a string with case sensitivity enabled

4. Enfin, exécutez la commande ci-dessous en utilisant regex pour rechercher le motif '\?' (un point d’interrogation) dans tous les fichiers texte (*.txt) dans le répertoire $PSHOME\en-US. Un regex vous permet de rechercher des motifs plus complexes.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?’

Si le contenu d’un fichier contient un point d’interrogation, la commande renvoie le chemin complet du fichier à la console, comme illustré ci-dessous.

Searching for a string (a question mark) in files using regex

Utilisation de ripgrep (rg) comme équivalent de grep sous Windows

rg est un utilitaire en ligne de commande open-source conçu pour rechercher rapidement à travers les fichiers en utilisant des motifs regex. Comme d’autres utilitaires en ligne de commande, rg propose de nombreuses options et fonctionnalités pour personnaliser vos recherches.

Mais contrairement à findstr et à la commande Select-String, rg n’est pas installé par défaut dans votre système d’exploitation Windows.

Pour utiliser rg comme équivalent de grep sous Windows:

1. Exécutez la commande scoop ci-dessous pour installer ripgrep sur votre système. scoop install ripgrep

scoop install ripgrep
Installing ripgrep on your system

2. Ensuite, exécutez la commande rg suivante pour vérifier la version installée de rg.

rg --version

Comme indiqué ci-dessous, vous verrez le numéro de version de rg installé. À ce stade, vous pouvez maintenant exécuter les commandes rg pour rechercher des chaînes.

Verifying rg is installed

3. Exécutez la commande rg ci-dessous pour rechercher la chaîne apple dans le fichier notes.txt.

rg apple C:\myfiles\notes.txt

La sortie affiche toutes les lignes dans le fichier notes.txt qui contiennent la chaîne apple, comme illustré ci-dessous.

Remarquez que la sortie est similaire à celle de la commande Select-String. Mais au lieu de surligner, rg change la couleur de la chaîne correspondante et du numéro de ligne pour une distinction rapide.

Searching for the string ‘apple’ in a text file

4. Maintenant, exécutez la commande suivante en utilisant regex pour rechercher des chaînes dans le fichier notes.txt.

Le regex ci-dessous utilise des limites de mots (\b) et indique à rg de rechercher des lignes de chaînes qui contiennent un mot commençant par ‘s’ et se terminant par ‘e’ (s\w+e).

rg "\bs\w+e\b" "C:\myfiles\notes.txt"
Search for strings using regex

Filtrer les recherches par type de fichier spécifique

Peut-être que vous êtes spécifique sur le répertoire dans lequel se trouve le fichier que vous recherchez, mais pas sur le nom du fichier. Dans de tels cas, rechercher le contenu du fichier tout en filtrant la recherche par type de fichier peut être la meilleure option.

Filtrer la recherche par types de fichiers spécifiques peut être utile lorsque vous souhaitez uniquement rechercher des types de fichiers particuliers. Ou lorsque vous souhaitez exclure certains types de fichiers de la recherche.

Pour filtrer la recherche par types de fichiers spécifiques, l’option --type fera l’affaire comme suit:

1. Exécutez la commande rg suivante pour rechercher la chaîne apple dans tous les fichiers texte (--type txt) du répertoire C:\\myfiles.

L’option --type prend un type de fichier comme argument, indiquant à la commande rg de ne rechercher que les fichiers correspondant au type de fichier spécifié.

rg "apple" "C:\myfiles" --type txt

La sortie ci-dessous montre la ligne contenant la chaîne ‘apple’ et le nom de fichier associé (notes.txt).

Filtering the search to specific file types

2. Ensuite, créez un fichier XML appelé notes.xml et remplissez le code ci-dessous. Ce fichier XML est simplement une préparation pour démontrer le fonctionnement des recherches par joker.

<?xml version="1.0" encoding="UTF-8"?>
<fruitBasket>
  <fruit id="1">
    <fruitName>Apple</fruitName>
  </fruit>     
</fruitBasket>

3. Maintenant, exécutez la commande ci-dessous pour rechercher la chaîne apple dans tous les fichiers (*.). Cette commande ne recherche que les fichiers txt et xml comme spécifié (-g).

rg "apple" "C:\myfiles" -g '*.{txt,xml}

Par défaut, rg est sensible à la casse. Par conséquent, la sortie affiche uniquement la ligne contenant la chaîne exacte « apple » et le fichier associé.

Filtering searches by a broader range of file types

4. Enfin, exécutez la commande suivante, comme vous l’avez fait à l’étape trois, pour rechercher la chaîne apple dans tous les fichiers (*.) ayant une extension txt ou xml. Mais cette fois, ajoutez l’option -i, ce qui indique à rg d’ignorer la casse des lettres.

rg "apple" "C:\myfiles" -g '*.{txt,xml}-i
Filtering searches by a broader range of file types ignoring letter cases

Conclusion

À travers ce tutoriel, vous avez appris de nombreux équivalents de grep sous Windows pour rechercher des chaînes de manière littérale et en utilisant des expressions régulières. Vous avez exploité la puissance de ces équivalents de grep avec une gamme d’options et de paramètres pour personnaliser la recherche et filtrer des types de fichiers spécifiques.

À ce stade, vous devriez être confiant dans le débogage de problèmes, l’identification d’issues et la recherche à travers de grands ensembles de fichiers texte.

Maintenant, pourquoi ne pas mettre vos nouvelles compétences à l’épreuve en pratiquant avec les expressions régulières et en personnalisant vos recherches ?

Source:
https://adamtheautomator.com/grep-equivalents-in-windows/