Question Equivalent Grep pour Windows 7?


Existe-t-il une invite de commande grep équivalent pour Windows 7? C'est-à-dire que je veux filtrer les résultats d'une commande:

Bash utiliser:

ls | grep root

Que serait-il à partir d'une invite de commande Windows?


210
2018-06-22 20:51


origine


ne confondez pas ms-dos avec l'invite de commande. + utilisation de find et findstr et même grep, pour windows .. est facilement trouvé avec une recherche rapide. il y a même des tables de commandes équivalentes dans linux et windows. vous aussi bash example n'est même pas spécifique à bash .. juste je suppose, * nix OS. - barlop


Réponses:


Findstr sonne comme ce que vous voulez. Je l'utilise tout le temps comme équivalent approximatif de grep sur la plate-forme Windows.

Un autre exemple avec des tuyaux:

C:\> dir /B | findstr /R /C:"[mp]"

253
2018-06-22 21:00



Oui, cela semble être ce que je recherche. Je comprends qu'il y a probablement des limitations. Je vais essayer. - chrisjlee
pourquoi ne pourraient-ils pas simplement l'appeler grep! - Victor Grazi
@VictorGrazi Ils ont effectivement fait au début, voir Cet article. Il s'appelait à l'origine qgrep - mais a été renommé par la suite. - Zitrax
Le gros problème avec findstr est que le modèle regex ne peut pas contenir d'alternatives. - Wolf
La question concerne Windows 7, mais quelles sont les autres versions de Windows? findstr par défaut? Depuis Windows XP? - Peter Mortensen


Il y a plusieurs possibilités:

  • Utiliser un port d'un Unix grep commander. Il y a plusieurs choix. Les plus cités sont GNUWin32, cygwin, et unxutils. Moins connus, mais à certains égards mieux, sont les outils du Trousse à outils de la SFUA, qui courent dans le Sous-système pour applications UNIX Cela vient directement dans Windows 7 Ultimate Edition et Windows Server 2008 R2. (Pour Windows XP, on peut Télécharger et installer Services pour UNIX version 3.5.) Cette boîte à outils contient un grand nombre d’outils TUI en ligne de commande, depuis mv et du, à travers les coquilles Korn et C, à perl et awk. Il existe en deux versions, x86-64 et IA64, ainsi que x86-32. Les programmes s'exécutent dans l'environnement POSIX natif de Windows, plutôt qu'avec les DLL d'émulateur (telles que cygwin1.dll) superposant les choses sur Win32. Et oui, la boîte à outils a grep, ainsi que 300 autres.
  • Utilisez l'un des nombreux Win32 natifs grep commandes que les gens ont écrites et publiées.  Tim Charron a une version Win32 native d'un grep GNU modifié, par exemple. Il y a aussi PowerGREP, Bare Grep, grepWin, AstroGrep, et dnGrep, bien qu'il s'agisse de tous les programmes GUI et non des programmes TUI.
  • Utilisez le fourni find et findstr.  La syntaxe est différente de celle de grep, notez, tout comme la capacité d'expression régulière.

40
2018-06-23 13:06



Cygwin a bien fonctionné pour moi sur Win 7. J'avais besoin de grep et GnuWin32 grep ne fonctionnait pas pour moi. - Kozuch
Vous écrivez que je ne vois pas perl dans SUA C: \ Windows \ SUA> dir perl * / s / b Fichier introuvable et par ex. c shell de SUA Je ne le vois pas dans / bin - barlop
vous écrivez aussi que la SFUA est à certains égards meilleure. De quelle manière? - barlop
@Kozuch sauf si vous dites comment cela n'a pas fonctionné, alors votre commentaire n'est pas utile - barlop


Si PowerShell les commandes sont autorisées, utilisez

PS C:\> Get-ChildItem | Select-String root

ou court

PS C:\> ls | sls root

Sachez que l'alias sls est uniquement défini en commençant par PowerShell version 3.0. Vous pouvez ajouter un alias pour moins de frappe:

PS C:\> New-Alias sls Select-String

Pour exécuter la commande PowerShell directement à partir de cmd, utilisez

C:\>powershell -command "ls | select-string root"

17
2018-01-13 13:16



Grep, la manière de Powershell. communary.net/2014/11/10/grep-the-powershell-way - Charles Burge


Dans votre première révision, vous avez écrit MS-DOS, il n'y a que FIND, Pour autant que je sache. Mais c'est un ancien OS non plus utilisé.

Dans l'invite de commande Windows NT (par exemple, Win2K et Win XP et versions ultérieures, par exemple, win7, win10), vous pouvez utiliser find et findstr et si vous téléchargez GnuWin32 puis grep 

Les différences fondamentales sont que findstr en a expressions régulières soutien. Grep supporte mieux les expressions régulières.

C:\>dir | find "abc"
C:\>dir | find /i "abc"

find /? et findstr /?vous montre ce que font les commutateurs.

Gnuwin32 a des "paquets". Si vous téléchargez GnuWin32, je suggère le paquet coreutils pour tout un tas d’utilitaires de base que vous connaissez bien, mais grep n’est pas dans celui-là.

Ajoutée

Le grep de GnuWin32, la dernière fois que j'ai vérifié, est vieux. Le grep de Cygwin est beaucoup plus à jour. Gardez également à l'esprit que de nombreuses personnes utilisent des machines virtuelles plutôt que des ports Windows de commandes * nix.


14
2018-06-22 21:00





Si vous préférez utiliser grep, plutôt que findstr, il y a un seul .exe version du fichier dans UnxUtils, il est donc portable et il n'est pas nécessaire de l'installer ou d'utiliser quelque chose comme Cygwin.


9
2018-06-22 21:07



Ceci est intéressant mais nécessiterait l'installation de cet outil. - chrisjlee
@Chris: Il n'y a pas d'installation. C'est juste un .zip fichier de .exe des dossiers. Le seul petit inconvénient est que les versions sont légèrement anciennes. - paradroid
Quel est l’inconvénient d’être vieux? Le logiciel peut-il être ancien? Tous les octets frais. - user unknown
GnuWin32 fournit également grep Pour les fenêtres: gnuwin32.sourceforge.net/packages/grep.htm - LiuYan 刘研
@userunknown bien, par exemple, la commande unxutils sed est plus ancienne et ne supporte pas \ d par exemple \ d22 pour spécifier le devis. Un wget plus ancien peut ne pas télécharger une page plus récente, et si vous demandez de l'aide, il se peut que vous ayez besoin de la dernière version pour résoudre certains problèmes. Un très vieux grep n'aura sans doute pas le niveau de prise en charge des regex dont un actuel dispose - barlop


Vous pouvez essayer d'installer Chocolaté sous Windows, et à travers cela, installez le Gow outil. Cela vous fournira grep sur Windows

Gow représente GNU sur Windows. Il fournit des utilitaires de ligne de commande Unix sous Windows.


3
2017-09-11 05:33



C'est un gestionnaire de paquets, comme un apt-get mais pour Windows. Il tire son nom du fait que le développeur l’a basé sur NuGet qui est un gestionnaire de paquets pour Visual Studio, et cela ressemble à de la pépite (comme dans le nugget de poulet), alors il pensait être "drôle" ou "intelligent" son programme Chocolatey NuGet. J'ai entendu ça dans un podcast qui l'a interviewé. Gow peut être téléchargé indépendamment aussi - barlop
Je suis nouveau sur Gow, après quelques jours d'utilisation, je peux témoigner que je l'aime beaucoup - c'est mieux que tous les anciens ports d'UNIX utilisés auparavant. - Radim Cernej
@RadimCernej votre commentaire n'est pas utile à moins d'indiquer Comment vous pensez que c'est mieux. - barlop
@barlop: Depuis que j'ai écrit mon commentaire de janvier 2016, je suis progressivement et complètement passé à Gow. Jusqu'ici aucun bogue, il a tous les utilitaires dont j'ai besoin / utilise, les chemins sont sortis au format Microsoft (ce qui facilite le copier / coller vers d'autres programmes). Gow est non invasif (facile à installer et à supprimer) et je vous recommande fortement de le tester. - Radim Cernej


Utilisation de Bash

$ ls | grep root

Utilisation du cmd

> dir /b | findstr root

/b représente bsont la liste des répertoires et des fichiers


2
2018-05-02 05:47



Cela duplique une autre réponse et n'ajoute aucun nouveau contenu. S'il vous plaît ne pas poster une réponse à moins que vous ayez réellement quelque chose de nouveau à contribuer. - DavidPostill♦
@DavidPostill: Ceci est une solution rapide pour les utilisateurs "TL; DR" (comme moi) - vladkras
Ce n’est pas une excuse pour ajouter une réponse qui n’apporte rien de nouveau. Dans tous les cas, la réponse acceptée apparaîtra toujours en premier, elle sera donc lue avant la vôtre. - DavidPostill♦
@DavidPostill, ça ne dérange pas, mais la réponse acceptée contient plusieurs inexpliqué clés /B, /R et /C OP n'a pas posé de questions, alors que ma réponse donne exact équivalent - vladkras
le /b est de faire le dir sortie le même que le ls sortie. Si vous le testez, vous verrez la différence. Donc ce n'est pas l'équivalent exact. - DavidPostill♦


J'ai écrit une alternative Windows à grep en utilisant le code Hybrid Batch / JScript. J'ai écrit cela parce que trouver les caractères d'échappement directement dans le port GNU Win32 grep était une vraie douleur. Cette version fonctionne beaucoup plus comme la façon dont vous voulez que la version GNU fonctionne sous Windows:

@set @junk=1 /*
@cscript //nologo //E:jscript %~f0 %*
@goto :eof */

var args=WScript.Arguments, argCnt=args.Length, stdin=WScript.StdIn, stdout=WScript.StdOut;
var replaceSingleQuotes=false, printMatchesOnly=false, matchString, flagString, regex, argDx=0;

if(argCnt==0) {
    throw new Error("You must provide search criteria.");
}

flagString=""
if(argCnt>1) {
    for(var bLoop=true; bLoop&&argDx<argCnt-1; argDx++) {
        switch(args(argDx)) {
        case '-t': replaceSingleQuotes=true; break;
        case '-o': printMatchesOnly=true; break;
        case '-g': flagString+="g"; break;
        case '-i': flagString+="i"; break;
        case '-m': flagString+="m"; break;
        default: bLoop=false; break;
        }
    }
}
if(replaceSingleQuotes) {
    matchString=args(argCnt-1).replace("'", '"');
} else {
    matchString=args(argCnt-1);
}

if(printMatchesOnly) {
    while(!stdin.AtEndOfStream) {
        var sLine=stdin.ReadLine();
        if(flagString.Length) regex=new RegExp(matchString, flagString);
        else regex=new RegExp(matchString);
        var m,matches=[],startDx=0;
        while((m=regex.exec(sLine.substr(startDx))) !== null) {
            stdout.WriteLine(m[0]);
            startDx+=m.lastIndex;
        }
    }
} else {
    if(flagString.Length) regex=new RegExp(matchString, flagString);
    else regex=new RegExp(matchString);
    while(!stdin.AtEndOfStream) {
        var sLine=stdin.ReadLine();
        if(regex.test(sLine)) {
            stdout.WriteLine(sLine);
        }
    }

}

Vous pouvez toujours trouver la dernière version sur mon Essentiel page pour cela.


2
2018-03-03 11:06





http://www.multireplacer.com

Le programme de remplacement multiple a été préparé pour que de nombreuses fonctions puissent être exécutées en utilisant Paramètres de ligne de commande. L'utilisation de la ligne de commande est vue ci-dessous:

MultiReplacer [Multi Replacer File] | [Search files] | [Search folders]
[-Subs] [-NoSubs] [-IncPtr=pattern] [-ExcPtr=patterns] [-DestDir=destination]
[-DMAnyTime]
[-DMWithinanhour] [-DMToday] [-DMYesterday] [-DMThisweek] [-DMThismonth]
[-DMThisYear]
[-CDMAfter=date] [-CDMBefore=date] [-MinFileSize=bytes count]
[-MaxFileSize=bytes count]
[-Search=text] [-Case] [-NoCase] [-Regex] [-NoRegex] [-SubMatchText=text]
[-ReplaceText=text]
[-StartSearch] [-StartReplace] [-AutoClose] [-StopAfterMatchThisFile] [-StopAfterMatchAll]
[-ExtractedWordsFile=filename] [-ExtractedLinesFile=filename] [-
ReportFile=filename]

1
2018-02-08 22:15





Vous pouvez toujours utiliser votre familier grep et d'autres commandes Linux en téléchargeant cet outil UnxUtils et l'ajouter à votre PATH variable d'environnement


0
2017-09-03 02:48



unxutils grep n'est pas aussi tard que vous pouvez obtenir .. unx grep est 2.4.2 mais gnuwin32 a un plus tard 2.5.4 - barlop