Existe-t-il un utilitaire de correspondance de modèles comme GREP dans Windows?

179

Existe-t-il un utilitaire similaire grepdisponible à partir de l'invite de commande Windows, ou existe-t-il un outil tiers pour cela?

Chintan Shah
la source

Réponses:

238

Il existe un outil de ligne de commande appelé FINDSTRqui est fourni avec tous les systèmes d'exploitation de classe Windows NT (tapez FINDSTR /?dans une fenêtre d'invite de commandes pour plus d'informations). Il ne prend pas en charge tout ce que grepfait mais cela peut être suffisant pour vos besoins.

Ken Keenan
la source
7
Merci! Ce n'est pas grep, mais j'aime pouvoir fonctionner sans installer de logiciel supplémentaire sur les machines d'autres personnes et cela me permettra.
sage
42
Vous pouvez également l'utiliser avec le symbole du tuyau, par exemplenetstat -n | FINDSTR 3389
harperville
3
@sage, avec un peu de créativité, findstr fonctionne exactement comme grep. Reportez-vous à cet exemple de grep pour Windows .
mkyong
2
@mkyong - Je suis d'accord. Je ne voulais pas suggérer qu'il est en quelque sorte incomplet, mais simplement qu'il est différent et que l'utilisation de plus d'outils nécessite plus de travail. Cela étant dit, findstr est mon outil de choix maintenant lorsque j'utilise les ordinateurs des autres, mais je dois rafraîchir ma mémoire sur la syntaxe à chaque fois que je l'utilise.
sage
1
@gonzobrains: Ce n'est pas si bien documenté. Pour autant que je sache, il a toujours été disponible à partir de l'invite de commande Windows NT - certainement, il était disponible dans Windows NT 4 mais je ne sais pas à propos de Windows 3.5x. L'invite de commande était considérée comme un "citoyen de seconde classe" par Microsoft à l'époque que de nombreux utilitaires de ligne de commande utiles ont été négligés dans la documentation ☹️
Ken Keenan
35

PowerShell (inclus en standard sur Windows 7 / 2008R2, facultatif pour XP / 2003 / Vista / 2008) qui inclut l' select-stringapplet de commande à cet effet.

Richard
la source
10
Alors que Select-String (alias: sls) utilise des expressions régulières, il ne prend pas en charge certaines fonctionnalités de base comme la récursivité de répertoire. Pour cela, vous devez combiner plusieurs commandes PowerShell. Comme "dir -R -Include * .txt | sls" ^ My Regex String $ "
yzorg
33

Grep pour Windows par GnuWin Project (02/10/2014: il est obsolète, voir les commentaires ci-dessous)

Gregor
la source
1
Il s'agit du grep GnuWin32. Il n'a pas été mis à jour avec la dernière version de grep. Pour cela, vous devrez vous procurer la version Cygwin. Voir le commentaire ci-dessous.
JPaget
27

comme mentionné, findstr fonctionne très bien. exemple :

C:> dir | findstr Windows

06/11/2013 à 21h55 Windows

Univers parallèle
la source
11

Cygwin grep et plus;)

sdu
la source
2
Vous n'avez pas besoin d'installer le package Cygwin complet pour exécuter Cygwin grep. Vous avez juste besoin d'environ 5 DLL: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll et cyggce_s-1.dll.
JPaget
J'utilise Cygwin depuis longtemps ... et j'ai récemment essayé de le remplacer par des sous-systèmes Windows-Linux ... pas pour longtemps ... RETOUR À CYGWIN ... beaucoup plus riche et moins intrusif ... il suffit d'ajouter <cygwin > \ bin vers le chemin ... et vous pouvez l'utiliser n'importe quel logiciel sous Windows / Batch / Powershell ... dans s DOS-Box ... dans une Powershell-Box ... etc. etc .--- GRAND OUTIL! !!
ZEE
11

J'ai également trouvé un autre moyen d'utiliser les fonctionnalités de type GREP dans Windows 7 et supérieur sans aucune application supplémentaire à installer et sur les systèmes plus anciens, vous pouvez utiliser installer Powershell.

Dans Powershell , l'utilisateur peut utiliser Where-Object, il dispose d'un ensemble assez complet de fonctionnalités qui fournit toutes les fonctionnalités de GREP et plus encore.

J'espère que ça aide.

Chintan Shah
la source
10

Je suis surpris que personne n'ait mentionné FINDSTR . Je ne suis pas un poweruser grep, mais findstr fait ce dont j'ai besoin, filtrer les fichiers et stdin, avec un support regex primitif. Livré avec Windows et tout ça. (Edit: Eh bien, quelqu'un a mentionné findstr, il est tard je suppose)

Svend
la source
5
"personne n'a mentionné FINDSTR" - la "meilleure" réponse a un an de plus et mentionne FINDSTR ...
chiccodoro
6

GnuWin32 mérite d'être mentionné, il fournit une version Win32 native de tous les outils Linux standard, y compris grep, file, sed, groff, indent, etc.

Et il est constamment mis à jour lorsque de nouvelles versions de ces outils sont publiées.

Diaa Sami
la source
Il semble maintenant disponible sur choclatey, donc cinst GnuWin32 travaille pour l'installer rapidement.
Stuart Axon
4

Sous Windows, j'utilise Far Manager pour la recherche de fichiers. Licence BSD, fonctionne dans la console, permet de gagner du temps lors de la saisie des paramètres cmdline. Voici sa boîte de dialogue de recherche invoquée par Alt-F7.Alt-F7

anatoly techtonik
la source
4

Mise à jour: ce n'était pas vrai lorsque la question a été posée à l'origine, mais maintenant Microsoft permet d' installer le sous-système Windows pour Linux , et Windows exécutera alors grep. Dans PowerShell, exécutez:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
woodvi
la source
Je l'ai essayé mais cela donne cette erreur: «Enable-WindowsOptionalFeature» n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes. Merci btw.
Sandun
Merci. Je vais essayer ça. ;)
Sandun
3

UnxUtils est un excellent ensemble d'utilitaires Unix qui fonctionnent sous Windows. Il a grep, sed, gawk, etc.

Andy White
la source
3
UnxUtils n'a pas été maintenu depuis des années. Utilisez plutôt GnuWin32 ou Cygwin.
JPaget
gnu sur windows (gow) est plus complet que GnuWin32: github.com/bmatzelle/gow/wiki
Simon D
3

Un excellent utilitaire de recherche de fichiers très rapide, Agent Ransack , prend en charge la recherche d'expression régulière. Il s'agit principalement d'un utilitaire GUI, mais une interface de ligne de commande est également disponible.

JPaget
la source
2

Dans le reskit Windows, il y a un utilitaire appelé "qgrep". Vous l'avez peut-être déjà sur votre boîte. ;-) Il est également livré avec la commande "tail", merci mon Dieu!

Jubal
la source
1

Bien que techniquement pas grep ni ligne de commande, Microsoft Visual Studio et Notepad ++ ont tous deux une très bonne fonctionnalité de recherche dans les fichiers avec une prise en charge complète des expressions régulières. Je me retrouve à les utiliser fréquemment même si j'ai également la version CygWin de grep disponible sur la ligne de commande.

GBegen
la source
1

J'ajouterai mon 0,02 $ à ce fil. dnGREP est un excellent outil grep open source pour Windows qui prend en charge l'annulation, l'intégration de l'explorateur Windows, la recherche dans les PDF, les zips, les DOC et un tas d'autres choses ...

stankovski
la source
1

Oui, il n'y a qu'un seul programme pour PC Windows qui a une interface graphique solide et c'est un utilitaire essentiel pour moi. Je travaille en tant que développeur et sur tous les ordinateurs que j'ai, installez d'abord le programme XFind. Il a été créé en 1997 et jusqu'à présent la version est 1.0 et jusqu'à présent fonctionne et c'est le meilleur. Souvent, j'ai besoin de rechercher une chaîne dans un " .cs", " .aspx", " .sct" (fichier de code de formulaire Visual FoxPro) ou simplement " . *" Et XFind scanne tous les fichiers et me montre des fichiers et une autre grande chose est que vous pouvez regarder où se trouve la chaîne dans le fichier. XFind a également une sorte d'éditeur. S'il s'agit d'un fichier binaire, il affichera la chaîne trouvée. Essayez-le et utilisez-le pour toujours si vous êtes développeur comme moi.

Shixx
la source
1

Vous avez évidemment reçu de nombreuses recommandations différentes.
Mon choix personnel pour un utilitaire tiers gratuit est: Agent Ransack
Téléchargement de l'agent Ransack
Malgré son nom quelque peu déroutant, il fonctionne bien et peut être utilisé de différentes manières pour trouver des fichiers.

Bonne chance

Dhugalmac
la source
0

Si un produit payant ne vous dérange pas, PowerGREP est mon préféré.

David Andres
la source
0

Nous avons récemment utilisé PowerGREP pour des opérations en masse assez avancées sur des milliers de fichiers. Y compris la recherche de regex dans le contenu des fichiers PDF et la modification de documents PDF à grande échelle.

Cela en vaut la peine si vous voulez gagner du temps sur le travail manuel. Vous pouvez l'essayer avant d'acheter je pense.

Lars Udengaard
la source
0

Si vous devez utiliser Windows nu, en plus de l'option Powershell indiquée ci-dessus, vous pouvez utiliser VBScript, qui prend en charge RegEx décent.

MS a également une zone de script décente sur Technet avec une tonne d'exemples pour les administrateurs.

Ron Rouble
la source
0

Essayez simplement l'utilitaire java LikeGrep. Cela peut vous aider dans de très nombreux cas. Comme vous le souhaitez, il peut également remplacer du texte, trouvé dans des fichiers. Il garantit son travail sur des fichiers volumineux (jusqu'à 8 Go testés)

Igor
la source
0

Comme mentionné ci-dessus, le projet gnuwin32 a une version Windows CLI de grep.

Si vous voulez quelque chose avec une interface graphique, je recommanderais l'outil (open-source) AstroGrep .

bta
la source
0

Cela fait un moment que je ne les ai pas utilisés, mais Borland (Embarcadero maintenant) a inclus un grep en ligne de commande avec leur compilateur C / C ++. Depuis quelque temps, ils mettent à disposition leur version 5.5 en téléchargement gratuit après leur inscription.

GreenMatt
la source
0

Je recommande PowerGrep

J'ai dû faire un projet de découverte électronique il y a plusieurs années. J'ai trouvé que cela fisdstravait certaines limites, surtout que fisdstr finirait par échouer

le script devait rechercher dans des milliers de fichiers en utilisant une dizaine de termes / expressions de recherche.

Le grep de Cygwin fonctionnait beaucoup mieux , il ne s'étouffait pas souvent, mais finalement je suis allé à PowerGrep parce que l'interface graphique permettait de dire beaucoup plus facilement quand et où il s'était écrasé, et il était également très facile d'éditer toutes les conditions et de sortir que Je voulais. Finalement, PowerGrep était le plus fiable des trois.

Haggisbreath
la source
0

Je sais que c'est un sujet un peu ancien, mais voici une autre chose que vous pouvez faire. Je travaille sur une VM de développeur sans accès à Internet et avec un espace disque libre assez limité, j'ai donc utilisé le Java installé dessus.

Compilez un petit programme java qui imprime les correspondances regex sur la console. Placez le jar quelque part sur votre système, créez un lot pour l'exécuter et ajoutez le dossier à votre variable PATH:

JGrep.java:

package com.jgrep;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JGrep {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        int printGroup = -1;
        if (args.length < 2) {
            System.out.println("Invalid arguments. Usage:");
            System.out.println("jgrep [...-MODIFIERS] [PATTERN] [FILENAME]");
            System.out.println("Available modifiers:");
            System.out.println(" -printGroup            - will print the given group only instead of the whole match. Eg: -printGroup=1");
            System.out.println("Current arguments:");
            for (int i = 0; i < args.length; i++) {
                System.out.println("args[" + i + "]=" + args[i]);
            }
            return;
        }
        Pattern pattern = null;
        String filename = args[args.length - 1];
        String patternArg = args[args.length - 2];        
        pattern = Pattern.compile(patternArg);

        int argCount = 2;
        while (args.length - argCount - 1 >= 0) {
            String arg = args[args.length - argCount - 1];
            argCount++;
            if (arg.startsWith("-printGroup=")) {
                printGroup = Integer.parseInt(arg.substring("-printGroup=".length()));
            }
        }
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
            sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }
        }
        Matcher matcher = pattern.matcher(sb.toString());
        int matchesCount = 0;
        while (matcher.find()) {
            if (printGroup > 0) {
                System.out.println(matcher.group(printGroup));
            } else {
                System.out.println(matcher.group());
            }
            matchesCount++;
        }
        System.out.println("----------------------------------------");
        System.out.println("File: " + filename);
        System.out.println("Pattern: " + pattern.pattern());
        System.out.println("PrintGroup: " + printGroup);
        System.out.println("Matches: " + matchesCount);
    }
}

c: \ jgrep \ jgrep.bat (avec jgrep.jar):

@echo off
java -cp c:\jgrep\jgrep.jar com.jgrep.JGrep %*

et ajoutez c: \ jgrep à la fin de la variable d'environnement PATH.

Maintenant, appelez simplement jgrep "expression" file.txt de n'importe où.

J'avais besoin d'imprimer des groupes spécifiques à partir de mon expression, j'ai donc ajouté un modificateur et l'ai appelé comme jgrep -printGroup=1 "expression" file.txt.

Mihail
la source
0

Je me rends compte que c'est une vieille question, mais je suis tombé sur ce post à la recherche d'une réponse. Et j'en ai trouvé un alors en l'ajoutant ici pour la mémoire collective Internet

Powershell: Module Select-String: Microsoft.PowerShell.Utility

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string

et un article de blog informatif avec des exemples avancés: «Comment« grep »dans PowerShell» https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Un exemple simple tiré de ce billet de blog: cat package.json | Select-String -Pattern webpack ls ./src/components/ | Select-String -Pattern View

C:> chat post.md | Select-String -Pattern "^ \ w *:"

blackweta
la source
0

Utiliser Cygwin ...

il a des versions 32 et 64 bits
et cela fonctionne bien de Windows 2000 (*)
à Windows 10 ou Server 2019

J'utilise Cygwin depuis longtemps ...
et j'ai récemment essayé de le remplacer par Windows-Linux-Subsystems ...

pas pour longtemps ...
je suis rapidement retourné chez Cygwin ...

beaucoup plus flexible, contrôlable et riche ...
aussi moins intrusif ...

ajoutez simplement \ bin au chemin ...
et vous pouvez l'utiliser n'importe quel logiciel sous Windows / Batch / Powershell ...
ou dans une DOS-Box ... ou dans une Powershell-Box ...

Vous pouvez également installer une tonne de packages géniaux
qui fonctionnent vraiment ... comme nginX ou PHP ... J'utilise même le package PHP Cygwin dans mon IIS ...

En prime, vous pouvez également l'utiliser à partir d'un shell bash ...
(je pense que c'était l'intention d'origine ;-))

ZEE
la source