Gibt es eine Eingabeaufforderung grep Äquivalent für Windows 7? Das heißt, ich möchte die Ergebnisse eines Befehls herausfiltern:
Bash verwenden:
ls | grep root
Was wäre es von einer Windows-Eingabeaufforderung?
Gibt es eine Eingabeaufforderung grep Äquivalent für Windows 7? Das heißt, ich möchte die Ergebnisse eines Befehls herausfiltern:
Bash verwenden:
ls | grep root
Was wäre es von einer Windows-Eingabeaufforderung?
Antworten:
Findstr hört sich nach dem an, was Sie wollen. Ich benutze es die ganze Zeit als ungefähres grep-Äquivalent auf der Windows-Plattform.
Ein weiteres Beispiel mit Rohren:
C:\> dir /B | findstr /R /C:"[mp]"
findstr
ist, dass das Regex-Muster möglicherweise keine Alternativen enthält.
findstr
standardmäßig? Seit Windows XP ?
Es gibt verschiedene Möglichkeiten:
grep
Befehls. Es gibt mehrere Möglichkeiten. Oft erwähnt werden GNUWin32 , Cygwin und Unxutils . Weniger bekannt, aber in gewisser Hinsicht besser, sind die Tools im SFUA-Dienstprogramm-Toolkit , die im Subsystem für UNIX-basierte Anwendungen ausgeführt werden , das in Windows 7 Ultimate Edition und Windows Server 2008 R2 enthalten ist. (Unter Windows XP können Sie Services for UNIX Version 3.5 herunterladen und installieren .) Dieses Toolkit enthält eine große Anzahl von Befehlszeilen-TUI-Tools von und über die Korn- und C-Shells zu undmv
du
perl
awk
. Es ist sowohl in den Varianten x86-64 und IA64 als auch in x86-32 erhältlich. Die Programme werden in der nativen POSIX-Umgebung von Windows ausgeführt, anstatt mit Emulator-DLLs (wie z. B. cygwin1.dll
), die Dinge über Win32 schichten. Und ja, das Toolkit hat grep
, sowie rund 300 andere.grep
Befehle, die von Benutzern geschrieben und veröffentlicht wurden. Tim Charron hat beispielsweise eine native Win32-Version eines modifizierten GNU-grep . Es gibt auch PowerGREP , Bare Grep , grepWin , AstroGrep und dnGrep , obwohl dies alles GUI-Programme sind, keine TUI-Programme.find
und findstr
. Die Syntax unterscheidet sich von der von grep
note, ebenso wie die Fähigkeit zum regulären Ausdruck.Wenn PowerShell- Befehle zulässig sind, verwenden Sie
PS C:\> Get-ChildItem | Select-String root
oder kurz
PS C:\> ls | sls root
Beachten Sie, dass der Alias sls
erst ab PowerShell Version 3.0 definiert wird. Sie können einen Alias für weniger Eingabe hinzufügen:
PS C:\> New-Alias sls Select-String
Verwenden Sie, um den PowerShell-Befehl direkt von cmd aus auszuführen
C:\>powershell -command "ls | select-string root"
In Ihrer frühen Überarbeitung haben Sie MS-DOS geschrieben, es gibt nur FIND
, soweit ich weiß. Aber es ist ein uraltes Betriebssystem, das nicht mehr verwendet wird.
In der Windows - NT - Eingabeaufforderung (zB Win2K und gewinnen XP und höher, so zB win7, win10), können Sie verwenden , find
und , findstr
und wenn Sie herunterladen GnuWin32 danngrep
Die grundlegenden Unterschiede bestehen darin, dass findstr einige reguläre Ausdrücke unterstützt. Grep unterstützt reguläre Ausdrücke am besten.
C:\>dir | find "abc"
C:\>dir | find /i "abc"
find /?
und findstr /?
zeigt Ihnen, was die Schalter tun.
Gnuwin32 hat "Pakete". Wenn Sie GnuWin32 herunterladen, empfehle ich das Paket coreutils für eine Reihe grundlegender nützlicher Dienstprogramme, mit denen Sie vertraut sind, aber grep ist nicht in diesem Paket enthalten, sondern in einem eigenen Paket.
Hinzugefügt
GnuWin32s Grep, das letzte Mal, als ich es überprüft habe, ist alt. Cygwins Grep ist viel aktueller. Bedenken Sie auch, dass viele Benutzer eher virtuelle Maschinen als Windows-Ports von * nix-Befehlen verwenden.
Wenn Sie lieber verwenden würden grep
, anstatt findstr
, gibt es eine einzige .exe
Dateiversion in UnxUtils , so tragbar es ist , und es gibt keine Notwendigkeit , es zu installieren, oder so etwas wie Cygwin verwenden.
.zip
Datei von .exe
Dateien. Der einzige kleine Nachteil ist, dass die Versionen etwas alt sind.
grep
Windows: gnuwin32.sourceforge.net/packages/grep.htm
Sie können versuchen, Chocolatey unter Windows zu installieren, und dadurch das Gow- Tool installieren . Dies wird Ihnen unter grep
Windows zur Verfügung stellen.
Gow
steht für GNU unter Windows. Es bietet Unix-Befehlszeilendienstprogramme unter Windows.
Bash verwenden
$ ls | grep root
Cmd verwenden
> dir /b | findstr root
Dabei /b
steht b für eine Liste von Verzeichnissen und Dateien
/B
, /R
und /C
OP nicht gefragt, während meine Antwort genau gleichwertig ist
/b
wird die dir
Ausgabe mit der Ausgabe identisch ls
. Wenn Sie es testen, werden Sie den Unterschied sehen. Es ist also nicht das genaue Äquivalent.
Ich habe eine Windows-Alternative zu grep mit Hybrid Batch / JScript-Code geschrieben. Ich habe das geschrieben, weil es ein echtes Problem war, die Escape-Zeichen direkt in den GNU-Win32-grep-Port zu bekommen. Diese Version funktioniert weitaus ähnlicher wie die GNU-Version unter 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);
}
}
}
Die aktuellste Version finden Sie dazu immer auf meiner Gist- Seite.
Das Multi-Replacement-Programm wurde so vorbereitet, dass viele Funktionen mithilfe von Befehlszeilenparametern ausgeführt werden können. Die Verwendung der Befehlszeile ist unten dargestellt:
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]
Ich würde empfehlen, busybox-w32 zu verwenden , da es nur etwa 500 KB groß ist und aktiv gewartet wird.
In Ihrem Fall lautet die Eingabeaufforderung wie folgt:
busybox ls | busybox grep root
Sie können doskey
in einer Eingabeaufforderung den Start durch eine Batchdatei verwenden, um einen Befehl zu erstellen, z.
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
Dann können Sie ls | grep root
an der Eingabeaufforderung verwenden.
Wenn Sie grep
Ihrer Windows-Umgebung das Einfachste hinzufügen möchten , navigieren Sie c:\windows\system32
mit dem folgenden Befehl zu einem kleinen Stapelskript und fügen Sie es hinzu :
echo findstr %1 > grep.bat
Jetzt kannst du
dir | grep notepad.exe
Das ist wirklich eine gruselige Mischung aus Scheiße. Fügen Sie daher ein weiteres Stapelskript hinzu, ls
wie in diesem Beitrag erläutert
echo dir %1 > %systemroot%\system32\ls.bat
Jetzt sieht es ein bisschen vertraut aus
ls | grep notepad
HTH
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
Das wird schnell und schmutzig sein.
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