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

Grep-Äquivalent für Windows 7?

Advertisement

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?

Advertisement
Advertisement

Antworten (13)

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

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]"
45
45
45
2011-06-23 13:06:17 +0000

Es gibt mehrere Möglichkeiten:

  • Benutzen Sie einen Port eines Unix- 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.
  • Nutzen Sie einen der vielen nativen Win32- 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.
  • Benutzen Sie die mitgelieferten find und findstr. Die Syntax unterscheidet sich von der von grep, beachten Sie, ebenso wie die Fähigkeit zum regulären Ausdruck.
19
Advertisement
19
19
2014-01-13 13:16:43 +0000
Advertisement

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"
18
18
18
2011-06-22 21:00:57 +0000

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.

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

Wenn Sie lieber grep statt findstr verwenden möchten, gibt es eine einzige .exe-Dateiversion in UnxUtils , so dass sie portabel ist und nicht installiert oder etwas wie Cygwin verwendet werden muss.

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

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.

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

Bash-Verwendung

$ ls | grep root

Cmd-Verwendung

> dir /b | findstr root

, wobei /b für b eine Liste von Verzeichnissen und Dateien ist

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

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.

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

http://www.multireplacer.com

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]
0
0
0
2016-06-12 12:31:27 +0000

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.

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

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

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

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

-2
-2
-2
2016-03-25 08:35:24 +0000
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
Advertisement

Verwandte Fragen

3
28
13
7
7
Advertisement
Advertisement