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

Grep-equivalent voor Windows 7?

Is er een opdrachtprompt grep -equivalent voor Windows 7? Dat wil zeggen dat ik de resultaten van een opdracht wil filteren:

Bash-gebruik:

ls | grep root

Wat zou het zijn van een Windows opdrachtprompt?

Antwoorden (13)

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

Findstr klinkt als wat je wilt. Ik gebruik het de hele tijd als een grofequivalent op het Windows-platform. Nog een voorbeeld met leidingen:

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

Er zijn verschillende mogelijkheden:

  • Gebruik een poort van een Unix grep commando. Er zijn verschillende keuzes. Vaak zijn dat GNUWin32 , cygwin , en unxutils . Minder bekend, maar in sommige opzichten beter, zijn de tools in de SFUA-toolkit , die draaien in het Subsystem for UNIX-based Applications dat daar in de doos met Windows 7 Ultimate edition en Windows Server 2008 R2 wordt geleverd. (Voor Windows XP kan men downloadt en installeert men Services voor UNIX versie 3.5 ). Deze toolkit heeft een groot aantal opdrachtregel-TUI-tools, van mv en du, via de Korn en C shells, tot perl en awk. Het is verkrijgbaar in zowel x86-64 en IA64-smaak als x86-32. De programma’s draaien in de eigenlijke POSIX-omgeving van Windows, in plaats van met emulator DLL’s (zoals cygwin1.dll) die dingen in lagen over Win32 verdelen. En ja, de toolkit heeft grep, evenals zo'n 300 andere.
  • Gebruik een van de vele native Win32 grep commando’s die mensen hebben geschreven en gepubliceerd. Tim Charron heeft een native Win32 versie van een aangepaste GNU grep , bijvoorbeeld. Er zijn ook PowerGREP , Bare Grep , grepWin , AstroGrep , en dnGrep , hoewel dit allemaal GUI-programma’s zijn die geen TUI-programma’s zijn.
  • Gebruik de meegeleverde find en findstr. De syntaxis is anders dan die van grep, let wel, net als de normale expressiemogelijkheid.
19
19
19
2014-01-13 13:16:43 +0000

Indien PowerShell commando’s zijn toegestaan, gebruik dan

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

of kort PS C:\> ls | sls root

Let op dat de alias sls alleen wordt gedefinieerd vanaf PowerShell versie 3.0. U kunt een alias toevoegen om minder te hoeven typen:

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

Om het PowerShell commando direct vanuit cmd uit te voeren, gebruik

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

In uw vroege revisie schreef u MS-DOS, er is alleen FIND, voor zover ik weet. Maar het is een oud OS dat niet meer wordt gebruikt.

In de Windows NT commandoprompt (bijvoorbeeld Win2K en win XP en later, dus bijvoorbeeld win7,win10), kun je find en findstr gebruiken en als je GnuWin32 downloadt dan grep

De basisverschillen zijn dat findstr een aantal reguliere uitdrukkingen ondersteuning heeft. Grep ondersteunt reguliere uitdrukkingen het beste.

C:\>dir | find "abc"
C:\>dir | find /i "abc"

find /? en findstr /? laat zien wat de schakelaars doen. Gnuwin32 heeft “pakketten”. Als je GnuWin32 downloadt, stel ik voor om het coreutils pakket te downloaden voor een aantal basis nuttige hulpprogramma’s die je wel kent, maar grep zit daar niet in, het is een eigen pakket.

Toegevoegd

GnuWin32’s grep, de laatste keer dat ik het controleerde, is oud. Cygwin’s grep is veel actueler. Hou er ook rekening mee dat veel mensen Virtuele Machines gebruiken in plaats van Windows-poorten van *nix-commando’s.

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

Als u liever grep gebruikt dan findstr, dan is er een enkele .exe bestandsversie in UnxUtils , dus het is draagbaar en het is niet nodig om het te installeren, of iets als Cygwin te gebruiken.

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

U kunt proberen Chocolatey op Windows te installeren en vervolgens het hulpprogramma Gow te installeren. Hierdoor krijgt u grep op Windows.

Gow staan voor GNU op Windows. Het biedt Unix-opdrachtenregelhulpprogramma’s voor Windows.

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

Bash-gebruik

$ ls | grep root

Cmd gebruik

> dir /b | findstr root

waarbij /b staat voor b zijn lijst van mappen en bestanden

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

Ik heb een Windows alternatief voor grep geschreven met behulp van Hybrid Batch/JScript code. Ik heb dit geschreven omdat het erg moeilijk was om de escape-karakters in de GNU Win32 grep poort te krijgen. Deze versie werkt veel meer zoals je zou willen dat de GNU versie werkt in 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);
        }
    }

}

Je kunt altijd de laatste versie vinden op mijn Gist pagina hiervoor.

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

http://www.multireplacer.com ](http://www.multireplacer.com)

Multi replacer programma is voorbereid zodat veel functies kunnen worden uitgevoerd door gebruik te maken van opdrachtregelparameters. Het gebruik van de opdrachtregel is hieronder te zien:

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

Ik stel voor om busybox-w32 te gebruiken, aangezien het slechts ongeveer 500 KB is en actief wordt onderhouden.

Zodat in uw geval, in de opdrachtprompt:

busybox ls | busybox grep root

U kunt doskey gebruiken in een opdrachtprompt lancering door een batch-bestand om een opdracht te maken, zoals:

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

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

Dan kunt u ls | grep root gebruiken op de opdrachtprompt.

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

Als je de eenvoudigste grep wilt toevoegen aan je windows omgeving, navigeer dan naar c:\windows\system32 en voeg een klein batch-scriptje toe met dit commando:

echo findstr %1 > grep.bat

Nu kun je

dir | grep notepad.exe

die echt een enge mix van shit is. Dus voeg een ander batch script toe voor ls zoals uitgelegd in deze post

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

nu ziet het er een beetje vertrouwd uit

ls | grep notepad

HTH

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

U kunt nog steeds uw vertrouwde grep en andere Linux-commando’s gebruiken door deze tool te downloaden UnxUtils en deze locatie toe te voegen aan uw PATH omgevingsvariabele

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

Dat zal snel en vies zijn.

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