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

Grep equivalente per Windows 7?

C'è un prompt di comando grep equivalente per Windows 7? Cioè, voglio filtrare i risultati di un comando:

Bash use:

ls | grep root

Cosa sarebbe da un prompt di comandi di Windows?

Risposte (13)

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

Findstr suona come quello che vuoi. Lo uso sempre come un grep-equivalente approssimativo sulla piattaforma Windows. Un altro esempio con tubi:

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

Ci sono diverse possibilità:

  • Utilizzare una porta di un comando Unix grep. Ci sono diverse scelte. Le seguenti sono GNUWin32 , cygwin , e unxutils . Meno noti, ma per certi versi migliori, sono gli strumenti del toolkit SFUA utility toolkit , che girano nel Subsystem for UNIX-based Applications che si trova proprio lì nella scatola con Windows 7 Ultimate edition e Windows Server 2008 R2. (Per Windows XP, si può scaricare e installare Servizi per UNIX versione 3.5 .) Questo toolkit ha un gran numero di strumenti TUI a riga di comando, da mv e du, attraverso i gusci Korn e C, fino a perl e awk. È disponibile sia nei gusti x86-64 e IA64 che x86-32. I programmi girano in ambiente POSIX nativo di Windows, piuttosto che con DLL emulatrici (come cygwin1.dll) che stratificano le cose su Win32. E sì, il toolkit ha grep, così come circa altri 300.
  • Usa uno dei tanti comandi nativi Win32 grep che la gente ha scritto e pubblicato. Tim Charron ha una versione nativa Win32 di un grep GNU grep modificato , per esempio. Ci sono anche PowerGREP , Bare Grep , grepWin , AstroGrep , e dnGrep , anche se questi sono tutti programmi GUI e non programmi TUI.
  • Utilizza il find e il findstr. La sintassi è diversa da quella del grep, nota, così come la capacità di espressione regolare.
19
19
19
2014-01-13 13:16:43 +0000

Se sono permessi i comandi PowerShell, usare

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

o breve

PS C:\> ls | sls root

Si noti che l'alias sls è definito solo a partire dalla versione 3.0 di PowerShell. È possibile aggiungere un alias per una minore digitazione:

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

Per eseguire il comando PowerShell direttamente da cmd, utilizzare

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

Nella sua prima revisione ha scritto MS-DOS, c'è solo FIND, per quanto ne so. Ma è un antico sistema operativo non più usato.

Nel prompt dei comandi di Windows NT (ad esempio Win2K e win XP e successivamente, quindi ad esempio win7,win10), si può usare find e findstr e se si scarica GnuWin32 allora grep

Le differenze fondamentali sono che findtr ha un certo supporto espressioni regolari . Grep supporta al meglio le espressioni regolari.

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

find /? e findstr /? vi mostra cosa fanno gli interruttori. Gnuwin32 ha “pacchetti”. Se scaricate GnuWin32, vi suggerisco il pacchetto coreutils per una serie di utilità utili di base che conoscete, ma grep non è in quello che è il suo pacchetto.

Added

Il grep di GnuWin32, l'ultima volta che ho controllato, è vecchio. Il grep di Cygwin è molto più aggiornato. Tenete anche presente che molte persone usano le macchine virtuali piuttosto che le porte finestre dei comandi *nix.

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

Se si preferisce usare grep, piuttosto che findstr, c'è una versione a singolo file .exe in UnxUtils , quindi è portatile e non c'è bisogno di installarlo, o di usare qualcosa come Cygwin.

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

Si può provare ad installare Chocolatey su Windows, e attraverso questo, installare lo strumento Gow . Questo vi fornirà grep su Windows.

Gow stanno per GNU su Windows. Fornisce utilità a riga di comando Unix su Windows.

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

Bash use

$ ls | grep root
``` ```
> dir /b | findstr root

Cmd use

&001

dove /b sta per b sono elenchi di directory e file

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

Ho scritto un'alternativa di Windows a grep utilizzando codice Hybrid Batch/JScript. Ho scritto questo perché ottenere i caratteri di escape direttamente nella porta grep di GNU Win32 è stata una vera sofferenza. Questa versione funziona molto più simile a come si vorrebbe che funzionasse la versione GNU 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);
        }
    }

}

Si può sempre trovare l'ultima versione sulla mia pagina Gist per questo.

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

http://www.multireplacer.com &003

Multi replacer program è stato preparato in modo che molte funzioni possano essere eseguite utilizzando i parametri della riga di comando. L'utilizzo della linea di comando è visibile qui sotto:

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

Suggerirei di usare busybox-w32 , dato che è solo circa 500 KB in dimensione e mantenuto attivamente.

Così che nel vostro caso, nel prompt dei comandi, è:

busybox ls | busybox grep root
``` ```
doskey ls="path\to\busybox.exe" ls $*

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

Si può usare doskey in un prompt dei comandi lancio da un file batch per fare un comando, come:

&001 &001

Poi si può usare ls | grep root sul prompt dei comandi.

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

Se volete aggiungere il più semplice grep al vostro ambiente windows, allora navigate su c:\windows\system32 e aggiungete un piccolo script batch usando questo comando:

echo findstr %1 > grep.bat
``` ```
dir | grep notepad.exe

Ora potete

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

che è davvero un mix di merda spaventoso. Quindi aggiungere un altro batch script per ls come spiegato in questo post

ls | grep notepad

Ora le cose sembrano un po’ familiari

&001

HTH

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

È ancora possibile utilizzare il vostro familiare grep e altri comandi Linux scaricando questo strumento UnxUtils e aggiungerlo alla vostra variabile d'ambiente PATH

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

Sarà un equivalente veloce e sporco.

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