Grep-Äquivalent für Windows 7?
Gibt es eine Eingabeaufforderung grep -Äquivalent für Windows 7? Das heißt, ich möchte die Ergebnisse eines Befehls herausfiltern:
Bash use:
ls | grep root
Wie würde eine Windows-Eingabeaufforderung aussehen?
Gibt es eine Eingabeaufforderung grep -Äquivalent für Windows 7? Das heißt, ich möchte die Ergebnisse eines Befehls herausfiltern:
Bash use:
ls | grep root
Wie würde eine Windows-Eingabeaufforderung aussehen?
Findstr klingt wie das, was Sie wollen. Ich benutze es ständig als ungefähres grep-Äquivalent auf der Windows-Plattform. Ein weiteres Beispiel mit Pipes:
C:\> dir /B | findstr /R /C:"[mp]"
Es gibt mehrere Möglichkeiten:
grep
-Befehls. Es gibt mehrere Möglichkeiten. Oft erwähnt werden GNUWin32 , cygwin , und unxutils . Weniger bekannt, aber in gewisser Weise besser, sind die Tools im SFUA Utility Toolkit , die im Subsystem für UNIX-basierte Anwendungen laufen, das im Lieferumfang von Windows 7 Ultimate Edition und Windows Server 2008 R2 enthalten ist. (Für Windows XP kann man herunterladen und Dienste für UNIX Version 3.5 installieren). Dieses Toolkit enthält eine große Anzahl von TUI-Tools für die Befehlszeile, von mv
und du
über die Korn- und C-Shells bis hin zu perl
und awk
. Es ist sowohl in den Geschmacksrichtungen x86-64 und IA64 als auch in x86-32 erhältlich. Die Programme laufen in der richtigen POSIX-Umgebung von Windows und nicht mit Emulator-DLLs (wie cygwin1.dll
), die die Dinge über Win32 schichten. Und ja, das Toolkit hat grep
, sowie etwa 300 andere. grep
-Befehle, die Leute geschrieben und veröffentlicht haben. Tim Charron hat eine native Win32-Version eines modifizierten GNU grep , zum Beispiel. Es gibt auch PowerGREP , Bare Grep , grepWin , AstroGrep und dnGrep , obwohl dies alles GUI-Programme und keine TUI-Programme sind. find
und findstr
. Die Syntax unterscheidet sich von der von grep
, beachten Sie, 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 ist. Sie können einen Alias für weniger Tipparbeit hinzufügen:
PS C:\> New-Alias sls Select-String
Um den PowerShell-Befehl direkt von cmd aus auszuführen, verwenden Sie
C:\>powershell -command "ls | select-string root"
In Ihrer frühen Revision haben Sie MS-DOS geschrieben, es gibt nur FIND
, soweit ich weiß. Aber es ist ein altes Betriebssystem, das nicht mehr verwendet wird.
In der Windows NT-Eingabeaufforderung (z.B. Win2K und win XP und später, also z.B. win7,win10) können Sie find
und findstr
verwenden, und wenn Sie GnuWin32 herunterladen, dann grep
Die grundlegenden Unterschiede sind, daß 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 Ihnen das Paket coreutils für eine Reihe von grundlegenden nützlichen Hilfsprogrammen, mit denen Sie vertraut sind, aber grep ist nicht in diesem Paket, es ist ein eigenes Paket.
Hinzugefügt
GnuWin32’s grep, als ich das letzte Mal nachgesehen habe, ist alt. Cygwin’s grep ist viel aktueller. Denken Sie auch daran, dass viele Leute eher virtuelle Maschinen als Windows-Ports von *nix-Befehlen verwenden.
Sie können versuchen, Chocolatey unter Windows zu installieren, und dadurch das Tool Gow installieren. Dadurch erhalten Sie grep
unter Windows.
Gow
steht für GNU unter Windows. Es stellt Unix-Befehlszeilen-Dienstprogramme unter Windows zur Verfügung.
Ich habe eine Windows-Alternative zu grep mit Hybrid Batch/JScript-Code geschrieben. Ich habe dies geschrieben, weil es sehr mühsam war, die Escape-Zeichen in der GNU Win32 grep-Portierung richtig hinzubekommen. Diese Version funktioniert viel mehr so, wie man sich die GNU-Version unter Windows wünscht:
@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);
}
}
}
Auf meiner Seite Gist finden Sie dazu immer die neueste Version.
Das Multi-Ersetzer-Programm wurde so vorbereitet, dass viele Funktionen mit Hilfe von Befehlszeilenparametern ausgeführt werden können. Die Verwendung der Kommandozeile 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 vorschlagen, busybox-w32 zu verwenden, da es nur etwa 500 KB groß ist und aktiv gewartet wird.
In Ihrem Fall heißt es also in der Eingabeaufforderung:
busybox ls | busybox grep root
Sie können doskey
in einer Eingabeaufforderung verwenden, die durch eine Batch-Datei gestartet wird, um einen Befehl zu erzeugen, wie:
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
Dann können Sie ls | grep root
in der Eingabeaufforderung verwenden.
Wenn Sie die einfachste grep
zu Ihrer Windows-Umgebung hinzufügen möchten, dann navigieren Sie zu c:\windows\system32
und fügen Sie ein kleines Batch-Skript mit diesem Befehl hinzu:
echo findstr %1 > grep.bat
Jetzt können Sie
dir | grep notepad.exe
hinzufügen, was wirklich eine beängstigende Mischung aus Scheiße ist. Fügen Sie also ein weiteres Batch-Skript für ls
hinzu, wie in diesem post
echo dir %1 > %systemroot%\system32\ls.bat
Nun sieht es etwas vertraut aus
ls | grep notepad
HTH
Sie können weiterhin Ihre vertrauten grep
- und andere Linux-Befehle verwenden, indem Sie dieses Tool UnxUtils herunterladen und es an der Stelle Ihrer Umgebungsvariablen PATH
einfügen
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
Das wird das schnelle und schmutzige Äquivalent 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