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

Czy istnieje odpowiednik grepu dla Windows 7?

Czy istnieje odpowiednik polecenia grep dla Windows 7? To znaczy, że chcę odfiltrować wyniki polecenia:

Użycie paska:

ls | grep root

Co by to było z zachęty komend Windows?

Odpowiedzi (13)

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

(http://technet.microsoft.com/en-us/library/bb490907.aspx) brzmi jak to, czego chcesz. Używam go cały czas jako przybliżonego odpowiednika grepy na platformie Windows. Inny przykład z rurkami:

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

Istnieje kilka możliwości:

  • Użyj portu komendy Unix grep. Istnieje kilka możliwości. Często są to: GNUWin32 , cygwin , oraz unxutils . Mniej znane, ale pod pewnymi względami lepsze, są narzędzia z zestawu narzędzi SFUA utility toolkit , które działają w Subsystem for UNIX-based Applications , który znajduje się w pudełku z Windows 7 Ultimate edition i Windows Server 2008 R2. (Dla Windows XP można pobrać i zainstalować Usługi dla UNIX-owych wersji 3.5 ). Ten zestaw narzędzi posiada dużą liczbę narzędzi TUI z linii poleceń, od mv i du, przez powłoki Korna i C, do perl i awk. Dostępny jest zarówno w smakach x86-64 i IA64, jak i x86-32. Programy te działają w natywnym środowisku POSIX systemu Windows, a nie z emulatorami DLL (np. cygwin1.dll) nakładającymi na Win32. I tak, zestaw narzędzi ma grep, a także około 300 innych.
  • Użyj jednego z wielu natywnych poleceń Win32 grep, które ludzie napisali i opublikowali. Tim Charron ma na przykład natywną wersję Win32 zmodyfikowanej GNU grep . Istnieją również PowerGREP , Bare Grep , grepWin , AstroGrep , oraz dnGrep , chociaż są to wszystkie programy z interfejsem graficznym, a nie programy z interfejsem TUI.
  • Użyj dostarczonych find i findstr. Składnia jest inna niż w przypadku grep, zauważ, podobnie jak możliwość wyrażania regularnego.
19
19
19
2014-01-13 13:16:43 +0000

Jeśli PowerShell polecenia są dozwolone, użyj

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

lub skrótu

PS C:\> ls | sls root

Należy pamiętać, że pseudonim sls jest zdefiniowany tylko od wersji 3.0 programu PowerShell. Możesz dodać alias dla mniejszego wpisywania:

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

Aby uruchomić polecenie PowerShell bezpośrednio z cmd, użyj

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

W swojej wczesnej wersji napisałeś MS-DOS, jest tylko FIND, o ile mi wiadomo. Ale jest to starożytny system operacyjny, który nie jest już używany.

W komendzie poleceń Windows NT (np. Win2K i win XP i później, więc np. win7,win10), możesz użyć find i findstr, a jeśli pobierzesz GnuWin32 wtedy grep

Podstawowe różnice są takie, że findstr ma jakieś wyrażenia regularne wsparcie. Grep najlepiej obsługuje wyrażenia regularne.

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

find /? i findstr /? pokazuje co robią przełączniki. Gnuwin32 ma “pakiety”. Jeśli pobierasz GnuWin32, proponuję pakiet coreutils dla kilku podstawowych, użytecznych narzędzi, z którymi byłbyś zaznajomiony, ale grep nie jest w tym, że jest to jego własny pakiet.

Dodany

GnuWin32’s grep, ostatni raz sprawdzony, jest stary. Cygwin’s grep jest o wiele bardziej aktualny. Należy również pamiętać, że wiele osób używa raczej wirtualnych maszyn niż portów Windows komend *nix.

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

Jeśli wolisz używać grep, a nie findstr, to w UnxUtils jest jedna wersja pliku .exe, więc jest przenośna i nie ma potrzeby jej instalować, ani używać czegoś takiego jak Cygwin.

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

Możesz spróbować zainstalować Chocolatey w systemie Windows, a przez to zainstalować narzędzie Gow . To zapewni Ci grep na Windows.

Gow oznaczają GNU na Windows. Udostępnia on narzędzia z linii poleceń Uniksa w systemie Windows.

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

Używając bashów

$ ls | grep root

Cmd użyj

> dir /b | findstr root

gdzie /b oznacza b to wykaz katalogów i plików

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

Napisałem alternatywę Windows dla grepu przy użyciu kodu Hybrid Batch/JScript. Napisałem to, ponieważ uzyskanie znaków ucieczki w porcie GNU Win32 grep było naprawdę bolesne. Ta wersja działa o wiele bardziej tak, jak chciałbyś, aby wersja GNU działała w 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);
        }
    }

}

Zawsze możesz znaleźć najnowszą wersję na mojej stronie Gist .

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

http://www.multireplacer.com

Program Multi-zastępczy został przygotowany w taki sposób, że wiele funkcji może być wykonywanych przy użyciu parametrów linii poleceń. Użycie linii poleceń jest widoczne poniżej:

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

Sugerowałbym użycie busybox-w32 , ponieważ jest to tylko około 500 KB w rozmiarze i aktywnie utrzymywany.

Tak więc w twoim przypadku, w wierszu poleceń, jest to:

busybox ls | busybox grep root

Można użyć doskey w wierszu poleceń uruchamianym przez plik wsadowy do wykonania polecenia, jak:

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

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

Następnie można użyć ls | grep root w wierszu poleceń.

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

Jeśli chcesz dodać najprostszy grep do swojego środowiska Windows, to przejdź do c:\windows\system32 i dodaj trochę skryptu wsadowego za pomocą tej komendy:

echo findstr %1 > grep.bat

Teraz możesz

dir | grep notepad.exe

co jest naprawdę przerażającą mieszanką gówna. Więc dodaj kolejny skrypt dla ls jak wyjaśniono w tym post

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

Teraz wszystko wygląda trochę znajomo

ls | grep notepad

HTH

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

Możesz nadal korzystać ze swoich znanych komend grep i innych poleceń Linuksa, pobierając to narzędzie UnxUtils i dodając jego lokalizację do zmiennej środowiskowej PATH.

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

To będzie szybki i brudny odpowiednik.

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