在Windows中有像GREP这样的模式匹配实用程序吗?

在Windows命令提示符中是否有类似grep的工具,或者是否有第三方工具?

286967 次浏览

Grep for Windows由GnuWin项目(2014-10-02:过时了,见下面的评论)

所有Windows nt类操作系统都有一个名为FINDSTR的命令行工具(在命令提示符窗口中键入FINDSTR /?以获取更多信息),它不支持grep所做的所有事情,但它可能足以满足您的需求。

PowerShell(作为Windows 7/2008R2的标准包含,XP/2003/Vista/2008的可选),它为此目的包含select-string cmdlet。

UnxUtils是一组运行在Windows上的Unix实用程序。它有grep, sed, gawk等。

如果你想要一个GUI, 裸露的Grep是很好的。Gnu grep适合CLI

如果您不介意付费产品,PowerGREP是我个人的最爱。

我们最近使用PowerGREP对数千个文件进行了一些相当高级的批量操作。包括PDF文件内容的正则表达式搜索,以及大规模修改PDF文档。

如果你想节省体力劳动的时间,它值这个钱。我认为你可以在买之前试用一下。

Cygwin grep and more;)

如果你必须使用纯Windows,那么除了上面提到的Powershell选项,你还可以使用VBScript,它有很好的RegEx支持。

MS在Technet上还有一个不错的脚本编写区,为管理员提供了大量的示例。

我很惊讶没有人提到。我不是grep poweruser,但findstr做什么我需要它,过滤文件和stdin,与一些基本的正则表达式支持。装有Windows系统的船。(编辑:嗯,有人提到了findstr,我猜是晚了)

GnuWin32值得一提,它提供了原生Win32版本的所有标准linux工具,包括grep, file, sed, groff, indent等。

当这些工具的新版本发布时,它会不断更新。

在windows reskit中有一个名为“qgrep”的实用程序。你的盒子上可能已经有了。;-)它还带有“尾巴”命令,感谢上帝!

虽然在技术上不是grep或命令行,Microsoft Visual Studio和notepad++都有一个非常好的文件查找功能,完全支持正则表达式。我发现自己经常使用它们,即使我在命令行上也有CygWin版本的grep可用。

请尝试LikeGrep java实用程序。 它可能在很多情况下对你有帮助。 如您所愿,它还可以替换文件中的一些文本。 它保证它的工作在大文件(高达8 Gb测试)

如上所述,gnuwin32项目有一个Windows CLI版本的grep。

如果你想要一个图形界面,我会推荐(开源)工具AstroGrep

我已经有一段时间没有使用它们了,但是Borland(现在是Embarcadero)在他们的C/ c++编译器中包含了命令行grep。一段时间以来,他们在注册后以免费下载的形式提供了他们的5.5版本。

我将把我的0.02美元添加到这个线程中。dnGREP是一个很棒的开源grep窗口工具,它支持撤销,windows资源管理器集成,在pdf, zip, DOCs和其他一堆东西中搜索…

有一个商业grep实用程序可从橡树路系统

一个优秀且非常快速的文件搜索工具代理洗劫支持正则表达式搜索。它主要是一个GUI实用程序,但也可以使用命令行界面。

我还发现了在Windows 7及以上版本中使用类似GREP的功能的另一种方法,无需安装任何额外的应用程序,在旧系统上,您可以使用安装Powershell。

Powershell中,用户可以使用,它具有相当全面的功能集,提供了GREP的所有功能以及更多。

希望有帮助。

如前所述,findstr工作得很好。例子:

C:>dir | findstr Windows

11/06/2013 09:55 PM Windows

其中,一体化的busybox包含grep / egrep / sed / awk等

从下面得到:

更新:不再可用-或一些旧的

在Windows上,我使用到经理进行文件搜索。BSD许可,在控制台工作,节省输入cmdline参数的时间。下面是Alt-F7调用的搜索对话框。 alt - f7

我推荐PowerGrep

几年前我做了一个电子发现项目。我发现fisdstr有一些限制,尤其是Fisdstr最终会失败

该脚本必须使用几十个搜索词/短语在数千个文件中搜索。

Cygwin的grep工作得更好,它不经常窒息,但最终我去了PowerGrep,因为图形界面使它更容易告诉它崩溃的时间和地点,而且它真的很容易编辑所有的条件和输出,我想要的。最终PowerGrep是最可靠的的三个。

是的,Windows PC只有一个程序,它有坚实的GUI,对我来说是必不可少的。我是一名开发人员,在我拥有的每台电脑上,第一件事就是安装XFind程序。它创建于1997年,到目前为止版本是1.0,到目前为止,它是最好的。我经常需要搜索“cs”、“. xml”中的某个字符串。aspx”、“.sct" (Visual FoxPro表单代码文件)或"。*"和XFind扫描所有文件,并显示文件,另一个伟大的事情是,你可以看到字符串在文件中的位置。XFind也有某种编辑器。如果它是二进制文件,它会显示你字符串找到。如果您像我一样是开发人员,请尝试并永远使用它。

你显然得到了很多不同的推荐 我个人选择一个免费的,第三方实用程序是:代理洗劫
Agent Ransack下载 < br > 尽管它的名字有点令人困惑,但它工作得很好,可以以各种方式使用它来查找文件。< / p >

祝你好运

我知道这是一个有点老的话题,但是,还有一件事你可以做。我在一个开发人员虚拟机上工作,没有互联网接入,空闲磁盘空间非常有限,所以我使用了安装在上面的java。

编译一个小java程序,打印正则表达式匹配到控制台。将jar放在你系统的某个地方,创建一个批处理来执行它,并将文件夹添加到你的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(与jgrep.jar一起):

@echo off
java -cp c:\jgrep\jgrep.jar com.jgrep.JGrep %*

并在PATH环境变量的末尾添加c: \ jgrep

现在只需从任何地方调用jgrep "expression" file.txt

我需要从表达式中输出一些特定的组,所以我添加了一个修饰符,并将其命名为jgrep -printGroup=1 "expression" file.txt

更新:最初问这个问题时,这不是真的,但现在微软让一个安装Windows子系统for Linux,然后Windows将运行grep。在PowerShell中运行:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

我知道这是一个老问题,但我看到这个帖子寻求答案。我找到了一个,所以把它添加到这里,作为互联网的集体记忆

< p > Powershell:选择string 模块: Microsoft.PowerShell.Utility < / p >

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string

和一个信息丰富的博客文章与高级示例:“如何在PowerShell中“grep”” https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/ < / p > 一个简单的例子来自那篇博客文章: 猫包。选择字符串-模式webpack . json | ls ./src/components/ | Select-String -Pattern View

. ls ./src/components/ |

C:>猫帖。md | Select-String -Pattern "^\w*:"

使用Cygwin…< br >

它有32位和64位版本
并且它可以在Windows 2000 (*)
中正常工作 Windows 10或Server 2019

我用Cygwin很长时间了…< br > 最近尝试用windows - linux -子系统来替代…

不会太久…< br > 我很快又回到了Cygwin……< br > < / p >

更加灵活、可控和丰富 也不那么打扰…< br > < / p >

只添加\bin到路径…< br > 你可以在Windows/Batch/Powershell中使用它 或者在DOS-Box里…或者装在powershell盒子里…< / p >

你也可以安装一大堆很棒的软件包 这真的有用……比如nginX或PHP… 我甚至在我的IIS中使用Cygwin PHP包 作为奖励,我们也可以从bash shell中使用它 (我认为这是最初的意图;-))

可能是一切?它支持regexp,也有一个控制台util。

TL;博士:ripgrep

自2009年以来,发生了很多事情。Rust提供了许多CLI实用程序,其中包括ripgrep。它被宣传为递归地搜索目录中的正则表达式模式,支持窗户, MacOSX和Linux。

它是看看与类似工具的性能比较。对工具的设计也有很多解释。信息量很大,也很怪。=)

支持POSIX grep工具支持的广泛特性。看看ack作者的比较

如果你有Scoop,你可以用scoop install ripgrep安装它。否则转到文档的安装部分