¿Hay una utilidad similar grep
disponible desde el símbolo del sistema de Windows, o hay una herramienta de terceros para ello?
¿Hay una utilidad similar grep
disponible desde el símbolo del sistema de Windows, o hay una herramienta de terceros para ello?
Respuestas:
Hay una herramienta de línea de comandos llamada FINDSTR
que viene con todos los sistemas operativos de clase Windows NT (escriba FINDSTR /?
en una ventana del símbolo del sistema para obtener más información). No admite todo grep
, pero puede ser suficiente para sus necesidades.
netstat -n | FINDSTR 3389
PowerShell (incluido de serie en Windows 7 / 2008R2, opcional para XP / 2003 / Vista / 2008) que incluye el select-string
cmdlet para este propósito.
Grep para Windows por GnuWin Project (2014-10-02: Está desactualizado, vea los comentarios a continuación)
Como se mencionó, FindStr funciona bien. ejemplo:
C:> dir | encuentra Windows
11/06/2013 09:55 PM Windows
Cygwin grep y más;)
También encontré una forma más de utilizar la funcionalidad similar a GREP en Windows 7 y superior sin ninguna aplicación adicional para instalar y en sistemas más antiguos puede usar instalar Powershell.
En Powershell , el usuario puede usar Where-Object , tiene un conjunto bastante completo de características que proporciona toda la funcionalidad de GREP y más.
Espero eso ayude.
Me sorprende que nadie haya mencionado FINDSTR . No soy grep poweruser, pero findtr hace lo que necesito para filtrar archivos y stdin, con un soporte primitivo de expresiones regulares. Se envía con Windows y todo eso. (Editar: Bueno, alguien mencionó a findtr, es tarde, supongo)
Vale la pena mencionar GnuWin32 , proporciona la versión nativa de Win32 de todas las herramientas estándar de Linux, incluidas grep, file, sed, groff, indent, etc.
Y se actualiza constantemente cuando se lanzan nuevas versiones de estas herramientas.
En Windows uso Far Manager para la búsqueda de archivos. Licencia BSD, funciona en la consola, ahorra tiempo al escribir parámetros de cmdline. Aquí está su diálogo de búsqueda invocado por Alt-F7.
Actualización: esto no era cierto cuando la pregunta se hizo originalmente, pero ahora Microsoft permite instalar el subsistema de Windows para Linux , y Windows ejecutará grep. En PowerShell, ejecute:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
UnxUtils es un gran conjunto de utilidades de Unix que se ejecutan en Windows. Tiene grep, sed, gawk, etc.
Una herramienta de búsqueda de archivos excelente y muy rápida, Agent Ransack , admite la búsqueda de expresiones regulares. Es principalmente una utilidad GUI, pero también está disponible una interfaz de línea de comandos.
Aunque técnicamente no es grep ni línea de comando, tanto Microsoft Visual Studio como Notepad ++ tienen una muy buena función Buscar en archivos con soporte completo de expresiones regulares. Me encuentro usándolos con frecuencia a pesar de que también tengo la versión CygWin de grep disponible en la línea de comandos.
Agregaré mis $ 0.02 a este hilo. dnGREP es una gran herramienta grep de código abierto para Windows que admite deshacer, la integración del explorador de Windows, buscar dentro de archivos PDF, zips, DOC y muchas otras cosas ...
Sí, solo hay un programa para PC con Windows que tiene una GUI sólida y es una utilidad esencial para mí. Trabajo como desarrollador y en cada computadora que he tenido, lo primero es instalar el programa XFind. Fue creado en 1997 y hasta ahora la versión es 1.0 y hasta ahora funciona y es la mejor. Con frecuencia necesito buscar alguna cadena en un " .cs", " .aspx", " .sct" (archivo de código de formulario de Visual FoxPro) o simplemente " . *" Y XFind escanea todos los archivos y me muestra archivos y otra gran cosa es que puedes ver dónde está la cadena en el archivo. XFind también tiene algún tipo de editor. Si se trata de un archivo binario, le mostrará una cadena de búsqueda. Pruébalo y úsalo para siempre si eres desarrollador como yo.
Obviamente has recibido muchas recomendaciones diferentes.
Mi elección personal para una utilidad gratuita de terceros es: Agent Ransack
Agent Ransack Download
A pesar de su nombre algo confuso, funciona bien y se puede utilizar de varias maneras para encontrar archivos.
Buena suerte
el busybox todo en uno contiene grep / egrep / sed / awk y MUCHOS más
obtenerlo de:
Actualización: ya no está disponible, o algunas más antiguas
Si no le importa un producto pagado, PowerGREP es mi favorito personal.
Recientemente hemos usado PowerGREP para algunas operaciones masivas bastante avanzadas en miles de archivos. Incluyendo la búsqueda de expresiones regulares en el contenido de archivos PDF y la alteración de documentos PDF a gran escala.
Vale la pena si quieres ahorrar tiempo de mano de obra. Puedes probarlo antes de comprar, creo.
Si tiene que usar Windows desnudo, además de la opción Powershell mencionada anteriormente, puede usar VBScript, que tiene un soporte decente de RegEx.
MS también tiene un área de scripting decente en Technet con un montón de ejemplos para administradores.
Ha pasado un tiempo desde que los usé, pero Borland (Embarcadero ahora) incluyó una línea de comando grep con su compilador C / C ++. Durante algún tiempo, han puesto a disposición su versión 5.5 como descarga gratuita después de registrarse.
Hay una utilidad comercial grep disponible de Oak Road Systems .
Recomiendo PowerGrep
Tuve que hacer un proyecto de descubrimiento electrónico hace varios años. Descubrí que fisdstr
tenía algunas limitaciones, especialmente fisdstr eventualmente fallaría
el script tuvo que buscar en miles de archivos usando un par de docenas de términos / frases de búsqueda.
El grep de Cygwin funcionó mucho mejor , no se ahogaba con frecuencia, pero finalmente fui a PowerGrep porque la interfaz gráfica me hizo mucho más fácil saber cuándo y dónde se bloqueó, y también fue muy fácil de editar en todos los condicionales y resultados que Quise. Finalmente, PowerGrep fue el más confiable de los tres.
Sé que es un tema un poco viejo, pero aquí hay otra cosa que puedes hacer. Trabajo en una máquina virtual de desarrollador sin acceso a Internet y espacio libre en disco bastante limitado, así que hice uso de Java instalado en él.
Compile un pequeño programa Java que imprima coincidencias de expresiones regulares en la consola. Coloque el jar en algún lugar de su sistema, cree un lote para ejecutarlo y agregue la carpeta a su variable PATH:
JGrep.java:
package com.jgrep;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JGrep {
public static void main(String[] args) throws FileNotFoundException, IOException {
int printGroup = -1;
if (args.length < 2) {
System.out.println("Invalid arguments. Usage:");
System.out.println("jgrep [...-MODIFIERS] [PATTERN] [FILENAME]");
System.out.println("Available modifiers:");
System.out.println(" -printGroup - will print the given group only instead of the whole match. Eg: -printGroup=1");
System.out.println("Current arguments:");
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]=" + args[i]);
}
return;
}
Pattern pattern = null;
String filename = args[args.length - 1];
String patternArg = args[args.length - 2];
pattern = Pattern.compile(patternArg);
int argCount = 2;
while (args.length - argCount - 1 >= 0) {
String arg = args[args.length - argCount - 1];
argCount++;
if (arg.startsWith("-printGroup=")) {
printGroup = Integer.parseInt(arg.substring("-printGroup=".length()));
}
}
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
}
Matcher matcher = pattern.matcher(sb.toString());
int matchesCount = 0;
while (matcher.find()) {
if (printGroup > 0) {
System.out.println(matcher.group(printGroup));
} else {
System.out.println(matcher.group());
}
matchesCount++;
}
System.out.println("----------------------------------------");
System.out.println("File: " + filename);
System.out.println("Pattern: " + pattern.pattern());
System.out.println("PrintGroup: " + printGroup);
System.out.println("Matches: " + matchesCount);
}
}
c: \ jgrep \ jgrep.bat (junto con jgrep.jar):
@echo off
java -cp c:\jgrep\jgrep.jar com.jgrep.JGrep %*
y agregue c: \ jgrep al final de la variable de entorno PATH.
Ahora simplemente llame jgrep "expression" file.txt
desde cualquier lugar.
Necesitaba imprimir algunos grupos específicos de mi expresión, así que agregué un modificador y lo llamé como jgrep -printGroup=1 "expression" file.txt
.
Me doy cuenta de que es una vieja pregunta, pero encontré esta publicación buscando una respuesta. Y he encontrado uno, así que lo agregué aquí para la memoria colectiva de Internet
Powershell: Módulo Select-String: Microsoft.PowerShell.Utility
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string
y una publicación de blog informativa con ejemplos avanzados: "Cómo" grep "en PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/
Un ejemplo simple de esa publicación de blog: cat package.json | Select-String -Pattern webpack ls ./src/components/ | Seleccionar cadena de vista de patrón
C:> gato post.md | Select-String -Pattern "^ \ w *:"
Usa Cygwin ...
Tiene versiones de 32 y 64 bits
y funciona bien desde Windows 2000 (*)
hasta Windows 10 o Server 2019
Uso Cygwin durante mucho tiempo ...
y recientemente intenté sustituirlo por Windows-Linux-Subsystems ...
no por mucho tiempo ...
volví rápidamente a Cygwin nuevamente ...
mucho más flexible, controlable y rico ...
también menos intrusivo ...
simplemente agregue \ bin a la ruta ...
y puede usarlo en Windows / Batch / Powershell ...
o en un DOS-Box ... o en un Powershell-Box ...
También puede instalar una tonelada de paquetes geniales
que realmente funcionan ... como nginX o PHP ... Incluso uso el paquete Cygwin PHP en mi IIS ...
Como beneficio adicional, también puedes usarlo desde un bash shell ...
(Creo que esta fue la intención original ;-))