2011-06-22 20:51:57 +0000 2011-06-22 20:51:57 +0000
246
246

Equivalent de grep pour Windows 7 ?

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

Bash use:

ls | grep root

Qu'est-ce que ce serait à partir d'une invite de commande Windows ?

Réponses (13)

287
287
287
2011-06-22 21:00:56 +0000

Findstr ressemble à ce que vous voulez. Je l'utilise tout le temps comme un équivalent approximatif de grep sur la plate-forme Windows. Un autre exemple avec des tuyaux :

C:\> dir /B | findstr /R /C:"[mp]"
45
45
45
2011-06-23 13:06:17 +0000

Il existe plusieurs possibilités :

  • Utiliser un port d'une commande Unix grep. Il existe plusieurs choix. Il existe plusieurs choix. Les plus souvent mentionnés sont GNUWin32 , cygwin et unxutils . Moins connus, mais d'une certaine manière meilleurs, sont les outils de la boîte à outils SFUA , qui fonctionnent dans le sous-système pour les applications basées sur UNIX qui se trouve dans la boîte avec 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, de mv et du, en passant par les shells Korn et C, jusqu'à perl et awk. Il est disponible dans les versions x86-64 et IA64 ainsi que x86-32. Les programmes fonctionnent dans l'environnement POSIX natif de Windows, plutôt qu'avec des DLL d'émulation (comme cygwin1.dll) qui superposent les choses sur Win32. Et oui, la boîte à outils contient grep, ainsi que quelque 300 autres
  • Utilisez l'une des nombreuses commandes Win32 grep natives que les gens ont écrites et publiées. Tim Charron a une version Win32 native d'un grep GNU modifié , par exemple. Il existe également PowerGREP , Bare Grep , grepWin , AstroGrep , et dnGrep , bien qu'il s'agisse de programmes d'interface graphique et non de programmes TUI.
  • Utilisez les commandes fournies find et findstr. La syntaxe est différente de celle de grep, notez, tout comme la capacité d'expression régulière.
19
19
19
2014-01-13 13:16:43 +0000

Si les commandes PowerShell sont autorisées, utilisez

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

ou short

PS C:\> ls | sls root

Soyez conscient que l'alias sls est seulement défini à partir de la version 3.0 de PowerShell. Vous pouvez ajouter un alias pour une saisie moins longue :

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

Pour exécuter la commande PowerShell directement depuis cmd, utilisez

C:\>powershell -command "ls | select-string root"
18
18
18
2011-06-22 21:00:57 +0000

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 qui n'est plus utilisé.

Dans l'invite de commande de Windows NT (par exemple Win2K et win XP et plus tard, donc par exemple win7,win10), vous pouvez utiliser find et findstr et si vous téléchargez GnuWin32 alors grep

Les différences de base sont que findstr a un certain support des expressions régulières . 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 vous suggère le paquet coreutils pour un tas d'utilitaires de base utiles que vous connaissez, mais grep n'est pas dans celui-là ; c'est son propre paquet.

Ajouté

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

9
9
9
2011-06-22 21:07:43 +0000

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

3
3
3
2014-09-11 05:33:28 +0000

Vous pouvez essayer d'installer Chocolatey sur Windows, et par ce biais, installer l'outil Gow . Vous obtiendrez ainsi grep sur Windows.

Gow signifie GNU sur Windows. Il fournit des utilitaires en ligne de commande Unix sous Windows.

2
2
2
2016-05-02 05:47:50 +0000

Utilisation de cash

$ ls | grep root

Utilisation de cmd

> dir /b | findstr root

/b signifie b sont des listes de répertoires et de fichiers

2
2
2
2015-03-03 11:06:06 +0000

J'ai écrit une alternative Windows au grep en utilisant le code Hybrid Batch/JScript. J'ai écrit cela parce que le fait d'obtenir les caractères d'échappement correctement dans le port grep de GNU Win32 était une véritable douleur. Cette version fonctionne beaucoup plus comme vous voudriez que la version GNU fonctionne dans 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 ma page Gist pour cela.

1
1
1
2014-02-08 22:15:42 +0000

http://www.multireplacer.com

Le programme Multi replacer a été préparé de manière à ce que de nombreuses fonctions puissent être exécutées en utilisant les paramètres de la ligne de commande. L'utilisation de la ligne de commande est présentée 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]
0
0
0
2016-06-12 12:31:27 +0000

Je vous suggère d'utiliser busybox-w32 , puisqu'il n'est que d'environ 500 KB de taille et activement maintenu.

Pour que dans votre cas, dans l'invite de commande, ce soit :

busybox ls | busybox grep root

Vous pouvez utiliser doskey dans une invite de commande lancée par un fichier batch pour faire une commande, comme :

doskey ls="path\to\busybox.exe" ls $*

doskey grep="path\to\busybox.exe" grep $*

Alors vous pouvez utiliser ls | grep root sur l'invite de commande.

0
0
0
2017-07-04 08:34:21 +0000

Si vous voulez ajouter le plus simple grep à votre environnement Windows, alors naviguez vers c:\windows\system32 et ajoutez un petit script batch en utilisant cette commande :

echo findstr %1 > grep.bat

Maintenant vous pouvez

dir | grep notepad.exe

qui est vraiment un mélange de merde effrayant. Ajoutez donc un autre script de traitement par lots pour ls comme expliqué dans ce post

echo dir %1 > %systemroot%\system32\ls.bat

Maintenant les choses semblent un peu familières

ls | grep notepad

HTH

0
0
0
2014-09-03 02:48:08 +0000

Vous pouvez toujours utiliser votre commande familière grep et d'autres commandes Linux en téléchargeant cet outil UnxUtils et en ajoutant son emplacement à votre variable d'environnement PATH

-2
-2
-2
2016-03-25 08:35:24 +0000
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd

Ce sera l'équivalent rapide et sale.

C:\Windows\system32>dir | grep xwiz
C:\Windows\system32>findstr xwiz
2009.06.10 23:03 4.041 xwizard.dtd
2009.07.14 03:39 42.496 xwizard.exe
2009.07.14 03:41 432.640 xwizards.dll