Pregunta Grep equivalente para Windows 7?


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

Bash uso:

ls | grep root

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


210


origen


no confunda ms-dos con el símbolo del sistema. + uso de find y findstr e incluso grep, para windows ... seguramente se encuentra fácilmente con una búsqueda rápida. incluso hay tablas de comandos equivalentes en Linux y Windows. también tu ejemplo bash no es específico para bash ... solo supongo, * nix OS. - barlop


Respuestas:


Findstr suena como lo que quieres. Lo uso todo el tiempo como un equivalente grep aproximado en la plataforma de Windows.

Otro ejemplo con tubos:

C:\> dir /B | findstr /R /C:"[mp]"

253



Sí, parece ser lo que estoy buscando. Entiendo que probablemente haya limitaciones. Lo probaré. - chrisjlee
¿Por qué no podrían simplemente llamarlo grep? - Victor Grazi
@VictorGrazi En realidad lo hicieron al principio, ver Este artículo. Originalmente fue llamado qgrep, pero luego fue renombrado. - Zitrax
El gran problema con findstr es que el patrón de expresiones regulares puede no contener alternativas. - Wolf
La pregunta es sobre Windows 7, pero qué otras versiones de Windows tienen findstr ¿por defecto? Desde Windows XP? - Peter Mortensen


Hay varias posibilidades:

  • Usa un puerto de Unix grep mando. Hay varias opciones. A menudo mencionado son GNUWin32, cygwiny unxutils. Menos conocido, pero de alguna manera mejor, son las herramientas en el Juego de herramientas de utilidad SFUA, que se ejecuta en el Subsistema para aplicaciones basadas en UNIX eso viene justo 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 una gran cantidad de herramientas de línea de comandos TUI, desde mv y du, a través de las conchas Korn y C, para perl y awk. Viene en ambos sabores x86-64 e IA64, así como x86-32. Los programas se ejecutan en el entorno POSIX apropiado nativo de Windows, en lugar de con DLL de emulador (como cygwin1.dll) superponiendo cosas sobre Win32. Y sí, el kit de herramientas tiene grep, así como otros 300 más.
  • Use uno de los muchos Win32 nativos grep comandos que las personas han 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, AstroGrepy dnGrep, aunque estos son todos programas GUI no programas TUI.
  • Use el suministrado find y findstr.  La sintaxis es diferente a la de grep, nota, como es la capacidad de expresión regular.

40



cygwin me funcionó muy bien en Win 7. Necesitaba grep y GnuWin32 grep no funcionó para mí. - Kozuch
Usted escribe No veo perl en SUA C: \ Windows \ SUA> dir perl * / s / b Archivo no encontrado y ejecutándose, p. c shell de SUA no lo veo en / bin - barlop
también escribes que SFUA es de alguna manera mejor. ¿De qué maneras? - barlop
@Kozuch a menos que diga cómo no funcionó, entonces su comentario no es útil - barlop


Si Potencia Shell los comandos 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 solo se define comenzando con PowerShell versión 3.0. Puede agregar un alias para escribir menos:

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

Para ejecutar el comando de PowerShell directamente desde cmd, use

C:\>powershell -command "ls | select-string root"

17



Grep, la manera Powershell. communary.net/2014/11/10/grep-the-powershell-way - Charles Burge


En su primera revisión, usted escribió MS-DOS, solo hay FIND, por lo que sé. Pero es un sistema operativo antiguo que ya no se usa.

En el símbolo del sistema de Windows NT (por ejemplo, Win2K y win XP y versiones posteriores, por ejemplo, win7, win10), puede usar find y findstr y si lo descargas GnuWin32 entonces grep 

Las diferencias básicas son que findstr tiene algunos expresiones regulares apoyo. Grep admite mejor las expresiones regulares.

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

find /? y findstr /?te muestra lo que hacen los interruptores

Gnuwin32 tiene "paquetes". Si descargas GnuWin32, te sugiero el paquete coreutils para un conjunto de utilidades básicas y útiles con las que estarías familiarizado, pero grep no está en eso, es su propio paquete.

Adicional

El grep de GnuWin32, la última vez que lo revisé, es viejo. El grep de Cygwin está mucho más actualizado. También tenga en cuenta que muchas personas usan máquinas virtuales en lugar de puertos de Windows de los comandos * nix.


14





Si prefieres usar grep, más bien que findstr, hay un solo .exe versión de archivo en UnxUtils, por lo que es portátil y no es necesario instalarlo, ni usar algo como Cygwin.


9



Esto es interesante, pero requeriría instalar esa herramienta. - chrisjlee
@Chris: no hay instalación. Es solamente un .zip archivo de .exe archivos. El único pequeño inconveniente es que las versiones son un poco viejas. - paradroid
¿Cuál es el inconveniente de ser viejo? ¿Puede el software ser viejo? Todos los bytes recientes. - user unknown
GnuWin32 también proporciona grep para ventanas: gnuwin32.sourceforge.net/packages/grep.htm - LiuYan 刘研
@userunknown, como ejemplo, el comando unxutils sed es anterior y no es compatible con \ d, p. \ d22 para especificar comillas. Es posible que un administrador más antiguo no descargue una página que una más nueva, y si solicita soporte, pueden solicitarle que obtenga la última ya que eso puede resolver algunos problemas. Un grep muy viejo sin duda no tendrá el nivel de soporte de expresiones regulares que tiene el actual - barlop


Puedes intentar instalar Chocolatey en Windows, y mediante eso, instale el Gow herramienta. Esto te proporcionará grep en Windows.

Gow representan GNU en Windows. Proporciona utilidades de línea de comandos de Unix en Windows.


3



Es un administrador de paquetes, como un apt-get pero para Windows. Recibió su nombre porque el desarrollador se basó en NuGet, que es un administrador de paquetes para Visual Studio, y eso suena a pepita (como en nugget de pollo), por lo que pensó que sería "gracioso" o "inteligente" y llamaría su programa Chocolatey NuGet. Escuché eso en un podcast que lo entrevistó. Gow se puede descargar de forma independiente también - barlop
Soy nuevo en Gow, después de algunos días de uso, puedo testificar que me gusta mucho, es mejor que todos los puertos anteriores de utilidades de UNIX que había usado antes. - Radim Cernej
@RadimCernej su comentario no es útil a menos que indique cómo crees que es mejor - barlop
@barlop: Desde que escribí mi comentario de enero de 2016, cambié de forma gradual y completa a Gow. Hasta el momento no hay errores, tiene todas las utilidades que necesito / uso, la ruta se genera en formato Microsoft (lo que facilita la copia / pegado a otros programas). Gow no es lo suficientemente invasivo (fácil de instalar y quitar) que recomiendo encarecidamente que lo pruebe. - Radim Cernej


Bash uso

$ ls | grep root

Cmd uso

> dir /b | findstr root

dónde /b representa segundoson una lista de directorios y archivos


2



Esto duplica otra respuesta y no agrega contenido nuevo. Por favor, no publique una respuesta a menos que realmente tenga algo nuevo para contribuir. - DavidPostill♦
@DavidPostill: esta es una solución rápida para los usuarios de "TL; DR" (como yo) - vladkras
Eso no es excusa para agregar una respuesta que no aporta nada nuevo. En cualquier caso, la respuesta aceptada siempre aparecerá primero, de modo que se leerá antes que la tuya. - DavidPostill♦
@DavidPostill, no importa, pero la respuesta aceptada contiene múltiples excesos y inexplicado llaves /B, /R y /C OP no preguntó, mientras mi respuesta da exacto equivalente - vladkras
los /b es hacer que el dir salida lo mismo que el ls salida. Si lo prueba, verá la diferencia. Entonces no es el equivalente exacto. - DavidPostill♦


Escribí una alternativa de Windows a grep usando el código Hybrid Batch / JScript. Escribí esto porque obtener los caracteres de escape directamente en el puerto grep Win32 de GNU fue un verdadero dolor. Esta versión funciona de manera más parecida a cómo le gustaría que la versión de GNU funcione 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 Esencia página para esto.


2





http://www.multireplacer.com

El programa multi replacer ha sido preparado para que se puedan llevar a cabo muchas funciones mediante el uso de parámetros de línea de comando. El uso de la línea de comando 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]

1





Todavía puede usar su familiar grep y otros comandos de Linux descargando esta herramienta UnxUtils y agregarle ubicación a su PATH Variable ambiental


0



unxutils grep no es tan tarde como puedas ... unx grep es 2.4.2 pero gnuwin32 tiene uno posterior 2.5.4 - barlop