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

¿Equivalente a Grep para Windows 7?

Advertisement

¿Existe un símbolo del sistema grep equivalente para Windows 7? Es decir, quiero filtrar los resultados de un comando:

Bash use:

ls | grep root

¿Qué sería de un símbolo del sistema operativo de Windows?

Advertisement
Advertisement

Respuestas (13)

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

(http://technet.microsoft.com/en-us/library/bb490907.aspx) suena como lo que quieres. Lo uso todo el tiempo como un equivalente aproximado del grep en la plataforma Windows. Otro ejemplo con tubos:

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

Hay varias posibilidades:

  • Utilizar un puerto de un comando de Unix grep. Hay varias opciones. A menudo se mencionan GNUWin32 , cygwin , y unxutils . Menos conocidas, pero en cierto modo mejores, son las herramientas del SFUA utility toolkit , que se ejecutan en el Subsistema para aplicaciones basadas en UNIX que viene en la caja con Windows 7 Ultimate edition y Windows Server 2008 R2. (Para Windows XP, uno puede descargar e instalar Servicios para UNIX versión 3.5 .) Este kit de herramientas tiene un gran número de herramientas TUI de línea de comandos, desde mv y du, pasando por los shells Korn y C, hasta perl y awk. Viene en los sabores x86-64 e IA64, así como en x86-32. Los programas se ejecutan en el entorno POSIX nativo adecuado de Windows, en lugar de con DLLs de emulador (como cygwin1.dll) que estratifican las cosas sobre Win32. Y sí, el kit de herramientas tiene grep, así como unos 300 más.
  • Utiliza uno de los muchos comandos nativos de Win32 grep que la gente ha escrito y publicado. Tim Charron tiene una versión nativa de Win32 de un grep GNU modificado , por ejemplo. También hay PowerGREP , Bare Grep , grepWin , AstroGrep , y dnGrep , aunque todos estos son programas GUI no programas TUI.
  • Utiliza los suministrados find y findstr. La sintaxis es diferente a la de grep, nota, al igual que la capacidad de expresión regular.
19
Advertisement
19
19
2014-01-13 13:16:43 +0000
Advertisement

Si los comandos de PowerShell están permitidos, use

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

o corto

PS C:\> ls | sls root

Tenga en cuenta que el alias sls sólo se define a partir de la versión 3.0 de PowerShell. Puede agregar un alias para no tener que escribir tanto:

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

Para ejecutar el comando PowerShell directamente desde cmd, use

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

En tu primera revisión escribiste MS-DOS, sólo hay FIND, hasta donde yo sé. Pero es un antiguo sistema operativo que ya no se usa.

En el símbolo del sistema operativo de Windows NT (por ejemplo, Win2K y win XP y posterior, así que por ejemplo win7,win10), puedes usar find y findstr y si descargas GnuWin32 entonces grep

Las diferencias básicas son que findstr tiene soporte para algunas expresiones regulares . Grep soporta mejor las expresiones regulares.

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

find /? y findstr /? muestra lo que hacen los interruptores. Gnuwin32 tiene “paquetes”. Si descargas GnuWin32, te sugiero el paquete coreutils para un montón de utilidades básicas útiles con las que estarías familiarizado, pero grep no está en ese, es su propio paquete.

Añadido

El grep de GnuWin32, la última vez que lo comprobé, es antiguo. El grep de Cygwin está mucho más actualizado. También tened en cuenta que mucha gente usa máquinas virtuales en lugar de los puertos de Windows de los comandos de *nix.

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

Si prefieres usar grep, en lugar de findstr, hay una única versión del archivo .exe en UnxUtils , así que es portátil y no hay necesidad de instalarlo, o usar algo como Cygwin.

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

Puedes intentar instalar Chocolatey en Windows, y a través de eso, instalar la herramienta Gow . Esto le proporcionará grep en Windows.

Gow son las siglas de GNU en Windows. Proporciona utilidades de línea de comandos de Unix en Windows.

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

Bash use

$ ls | grep root

Cmd use

> dir /b | findstr root

donde /b significa b son listas de directorios y archivos

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

Escribí una alternativa de Windows para el grep usando el código Hybrid Batch/JScript. Lo escribí porque conseguir los caracteres de escape en el puerto grep de GNU Win32 fue un verdadero dolor. Esta versión funciona mucho más parecido a como te gustaría que funcionara la versión GNU en 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);
        }
    }

}

Siempre puedes encontrar la última versión en mi página Gist para esto.

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

http://www.multireplacer.com

El programa de reemplazo múltiple ha sido preparado para que muchas funciones puedan ser llevadas a cabo usando los parámetros de la línea de comando. El uso de la línea de comandos se ve a continuación:

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

Yo sugeriría usar busybox-w32 , ya que sólo tiene un tamaño aproximado de 500 KB y se mantiene activamente.

De modo que en su caso, en la línea de comandos, es:

busybox ls | busybox grep root

Puede usar doskey en un lanzamiento de la línea de comandos mediante un archivo por lotes para hacer un comando, como:

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

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

Luego puede usar ls | grep root en la línea de comandos.

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

Si quieres añadir el más simple grep a tu entorno de Windows, entonces navega a c:\windows\system32 y añade un pequeño script por lotes usando este comando:

echo findstr %1 > grep.bat

Ahora puedes

dir | grep notepad.exe

que es realmente una mezcla de mierda que da miedo. Así que añade otro script de lotes para ls como se explica en este post

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

Ahora las cosas se ven un poco familiares

ls | grep notepad

HTH

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

Puedes seguir usando tu familiar grep y otros comandos de Linux descargando esta herramienta UnxUtils y añadirla a tu variable de entorno PATH

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

Eso va a ser el equivalente rápido y sucio.

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

Preguntas relacionadas

3
28
13
7
4
Advertisement
Advertisement