Windows命令提示符中是否有与grep类似的实用程序,或者是否有第三方工具?


Grep for Windows by GnuWin Project(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, Bare Grep是不错的选择。Gnu grep适合CLI


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


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

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


Cygwin grep和更多;)


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

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


我很惊讶没有人提到FINDSTR。我不是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和其他一堆东西里面搜索…


Oak Road Systems提供了一个商业grep实用程序。


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


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

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

希望有帮助。


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

C:>dir | findstr Windows

11/06/2013 09:55 PM Windows


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

从下面得到:

http://frippery.org/busybox/index.html http://frippery.org/files/busybox/?C=M;O=D

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

https://github.com/pclouds/busybox-w32


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


我推荐PowerGrep

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

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

Cygwin的grep工作得更好,它不经常阻塞,但最终我选择了PowerGrep,因为图形界面使它更容易判断崩溃的时间和地点,而且它非常容易编辑所有我想要的条件和输出。最终,PowerGrep是三者中最可靠的。


Yes there is only one program for Windows PC which have solid GUI and it is essential util for me. I work as a developer and on every computer I've had, first thing install XFind program. It is created in 1997 and till now version is 1.0 and till now works and it is the best. Frequently I need to search some string in a ".cs", ".aspx", ".sct" (Visual FoxPro form code file) or just ".*" and XFind scans all files and show me files and another great thing is that you can look where string is in the file. XFind has also some kind of editor. If it binary file it will show you string finded. Try it and use it forever if you are developer like me.


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

祝你好运


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


更新:最初问这个问题的时候不是这样的,但是现在微软允许为Linux安装Windows子系统,然后Windows将运行grep。在PowerShell中运行:

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

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

Powershell:选择string 模块: Microsoft.PowerShell.Utility

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/

举个简单的例子: 猫包。选择字符串-模式webpack . json | ls ./src/components/ | Select-String -Pattern View

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


使用Cygwin……

它有32位和64位版本 它在Windows 2000中工作良好(*) Windows 10或Server 2019

我用Cygwin很久了…… 最近尝试用windows - linux -子系统来替代…

不会太久…… 我很快又回到了Cygwin……

更加灵活、可控和丰富…… 也不那么打扰…

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

你也可以安装很多很棒的软件包 这真的有用……比如nginX或PHP… 我甚至在我的IIS中使用Cygwin PHP包…

作为奖励,我们也可以在bash shell中使用它… (我认为这是最初的意图;-))


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


DR:撕裂握把

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

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

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

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