Existe-t-il une invite de commande équivalente à grep pour Windows 7? C’est-à-dire que je souhaite filtrer les résultats d’une commande:
Utilisation Bash:
ls | grep root
Que serait-il à partir d'une invite de commande Windows?
Existe-t-il une invite de commande équivalente à grep pour Windows 7? C’est-à-dire que je souhaite filtrer les résultats d’une commande:
Utilisation Bash:
ls | grep root
Que serait-il à partir d'une invite de commande Windows?
Réponses:
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]"
findstr
est que le motif regex peut ne pas contenir d'alternatives.
findstr
par défaut? Depuis Windows XP ?
Il y a plusieurs possibilités:
grep
commande Unix . Il y a plusieurs choix. On mentionne souvent GNUWin32 , cygwin et unxutils . Les outils de la boîte à outils de l' utilitaire SFUA , qui s'exécutent dans le sous - système pour les applications UNIX et fournis avec Windows 7 Édition Intégrale et Windows Server 2008 R2 , sont moins connus mais, à certains égards, mieux . (Sous Windows XP, vous pouvez télécharger et installer Services for 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 shells Korn et C, vers perl
etawk
. Il vient dans les deux saveurs x86-64 et IA64 aussi bien que x86-32. Les programmes s'exécutent dans l'environnement POSIX propre et naturel de Windows, plutôt qu'avec des DLL d'émulateur (telles que des cygwin1.dll
couches superposées sur Win32). Et oui, la boîte à outils a grep
, ainsi que 300 autres.grep
commandes Win32 natives que les utilisateurs ont écrites et publiées. Tim Charron a par exemple une version Win32 native d’un grap GNU modifié . Il existe également PowerGREP , Bare Grep , grepWin , AstroGrep et dnGrep , bien qu'il s'agisse de programmes à interface graphique et non de programmes TUI.find
et findstr
. La syntaxe est différente de celle de grep
, note, de même que la capacité d'expression régulière.Si les commandes PowerShell sont autorisées, utilisez
PS C:\> Get-ChildItem | Select-String root
ou court
PS C:\> ls | sls root
Sachez que l'alias sls
n'est défini qu'à partir de 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"
Dans votre première révision, vous avez écrit MS-DOS, il n'y en a que FIND
, pour autant que je sache. Mais c'est un ancien système d'exploitation qui n'est plus utilisé.
Dans l'invite de commande Windows NT (par exemple Win2K et gagner XP et versions ultérieures, donc par exemple win7, win10), vous pouvez utiliser find
et findstr
si vous téléchargez GnuWin32 puisgrep
Les différences fondamentales sont que findstr prend en charge certaines 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 "packages". Si vous téléchargez GnuWin32, je suggère le paquet coreutils pour un ensemble d’utilitaires de base utiles que vous connaissez bien, mais grep n’est pas dans celui-là, c’est son propre paquet.
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. Notez également que de nombreuses personnes utilisent des machines virtuelles plutôt que les commandes Windows des commandes * nix.
Si vous préférez utiliser grep
plutôt qu’une version de fichier findstr
unique .exe
dans UnxUtils , elle est donc portable et il n’est pas nécessaire de l’installer, ni d’utiliser quelque chose comme Cygwin.
.zip
fichier de .exe
fichiers. Le seul petit inconvénient est que les versions sont légèrement anciennes.
grep
pour Windows: gnuwin32.sourceforge.net/packages/grep.htm
Vous pouvez essayer d'installer Chocolatey sous Windows et, par la même occasion, installer l' outil Gow . Cela vous fournira avec grep
Windows.
Gow
stand pour GNU sous Windows. Il fournit des utilitaires de ligne de commande Unix sous Windows.
Utilisation Bash
$ ls | grep root
Cmd utilisation
> dir /b | findstr root
où /b
est synonyme de b sont la liste des répertoires et fichiers
/B
, /R
et /C
OP n'a pas posé de question, alors que ma réponse donne l' équivalent exact
/b
est de rendre la dir
sortie identique à la ls
sortie. Si vous le testez, vous verrez la différence. Ce n'est donc pas l'équivalent exact.
J'ai écrit une alternative Windows à grep en utilisant du code hybride Batch / JScript. J'ai écrit ceci parce qu'obtenir les caractères d'échappement directement dans le port grep GNU Win32 était une vraie douleur. Cette version fonctionne beaucoup plus comme vous voudriez 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 ma page Gist pour cela.
Le programme de remplacement multiple a été préparé de sorte que de nombreuses fonctions puissent être exécutées à l’aide de 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]
Vous pouvez toujours utiliser vos commandes habituelles grep
et d'autres commandes Linux en téléchargeant cet outil UnxUtils et en l'ajoutant à l'emplacement de votre PATH
variable d'environnement.
2.4.2
mais gnuwin32 en a un plus tard 2.5.4
Je suggérerais d'utiliser busybox-w32 , car sa taille n'est que d'environ 500 Ko et qu'il est maintenu activement.
Ainsi, dans votre cas, à l'invite de commande, il s'agit de:
busybox ls | busybox grep root
Vous pouvez utiliser doskey
une invite de commande lancée par un fichier de commandes pour créer une commande, telle que:
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
Ensuite, vous pouvez utiliser ls | grep root
sur l'invite de commande.
Si vous souhaitez ajouter le plus simple grep
à votre environnement Windows, recherchez 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
ce qui est vraiment un mélange effrayant de merde. Donc, ajoutez un autre script de lot pour ls
comme expliqué dans ce post
echo dir %1 > %systemroot%\system32\ls.bat
Maintenant, les choses semblent un peu familier
ls | grep notepad
HTH
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
Ce sera un é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