在Windows中是否有类似GREP的模式匹配实用程序?

时间:2009-09-12 21:48:25

标签: windows grep

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

32 个答案:

答案 0 :(得分:223)

有一个名为FINDSTR的命令行工具,它附带所有Windows NT类操作系统(在命令提示符窗口中键入FINDSTR /?以获取更多信息)它不支持所有内容{{ 1}}但它可能足以满足您的需求。

答案 1 :(得分:33)

Grep for Windows by GnuWin Project(2014-10-02:已过时,请参阅下面的评论)

答案 2 :(得分:32)

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

答案 3 :(得分:24)

如上所述,findstr工作正常。例如:

C:> dir | findstr Windows

11/06/2013 09:55 PM Windows

答案 4 :(得分:11)

Cygwin grep等等;)

答案 5 :(得分:11)

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

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

希望它有所帮助。

答案 6 :(得分:10)

我很惊讶没有人提到FINDSTR。我不是grep poweruser,但是findstr做了我需要它,过滤文件和stdin,有一些原始的正则表达式支持。使用Windows和所有这些。 (编辑:有人确实提到了发现,我猜迟了)

答案 7 :(得分:6)

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

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

答案 8 :(得分:4)

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

答案 9 :(得分:3)

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

答案 10 :(得分:3)

更新:当问题最初被问到时,这不是真的,但现在微软允许一个Install the Windows Subsystem for Linux,然后Windows将运行grep。在PowerShell中,运行:

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

答案 11 :(得分:3)

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

答案 12 :(得分:2)

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

答案 13 :(得分:1)

我会将0.02美元添加到此主题中。 dnGREP是一个很棒的开源grep工具,用于支持撤消,Windows资源管理器集成,搜索PDF,拉链,DOC和其他一些内容......

答案 14 :(得分:1)

你显然已经得到了很多不同的建议 我个人对免费第三方实用程序的选择是:代理Ransack
Agent Ransack Download
尽管名称有点令人困惑,但它运行良好,可以通过各种方式查找文件。

祝你好运

答案 15 :(得分:1)

是的,只有一个Windows PC程序具有可靠的GUI,对我来说它是必不可少的。我是一名开发人员,在我拥有的每台计算机上,首先安装XFind程序。它创建于1997年,直到现在版本为1.0,直到现在工作,它是最好的。我经常需要在“ .cs”,“ .aspx”,“ .sct”(Visual FoxPro表单代码文件)或“。*”中搜索一些字符串。和XFind扫描所有文件并显示文件,另一个好处是你可以查看文件中的字符串。 XFind也有某种编辑器。如果它是二进制文件,它将显示字符串finded。如果您是像我这样的开发人员,请尝试并永久使用它。

答案 16 :(得分:1)

虽然技术上不是grep也不是命令行,但Microsoft Visual Studio和Notepad++都具有非常好的“在文件中查找”功能,并且具有完整的正则表达式支持。我发现自己经常使用它们,即使我在命令行上也有CygWin版本的grep。

答案 17 :(得分:0)

自从我使用它们已经有一段时间了,但Borland(现在的Embarcadero)在其C / C ++编译器中包含了命令行grep。一段时间后,他们在注册后将其5.5版本作为free download提供。

答案 18 :(得分:0)

Oak Road Systems提供了一个商业grep工具。

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

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

答案 21 :(得分:0)

all-in-one busybox包含grep / egrep / sed / awk以及更多

从以下地址获取:

或一些较旧的

答案 22 :(得分:0)

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

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

答案 23 :(得分:0)

我建议 PowerGrep

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

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

Cygwin的grep工作得更好,它并没有经常窒息,但最终我去了PowerGrep,因为图形界面让它更容易分辨出崩溃的时间和地点,在我想要的所有条件和输出中编辑也非常容易。最终 PowerGrep是三者中最可靠的

答案 24 :(得分:0)

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

如果你想节省manuel劳工的时间,那值得花钱。你可以在买之前尝试一下。

答案 25 :(得分:0)

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

答案 26 :(得分:0)

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

答案 27 :(得分:0)

如果你想要一个GUI,

Bare Grep很好。 Gnu grep适用于CLIp>

答案 28 :(得分:0)

我意识到这是一个老问题,但我偶然发现了此帖子以寻求答案。而且我发现了一个,所以在这里添加它以存储集体的互联网记忆

Powershell:选择字符串 模块: Microsoft.PowerShell.Utility

https://docs.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/

该博客文章中的一个简单示例: 猫package.json |选择字符串-模式webpack ls ./src/components/ |选择字符串-模式视图

C:> cat post.md |选择字符串-模式“ ^ \ w *:”

答案 29 :(得分:0)

使用Cygwin ...

它具有32位和64位版本
可以在Windows 2000(*)上正常运行
到Windows 10或Server 2019

我使用Cygwin很久了...
并且最近尝试用Windows-Linux-Subsystems代替...

好久不见...
我很快又回到了Cygwin ...

更加灵活,可控制和丰富...
也较少打扰...

只需将\ bin添加到路径...
您可以在Windows / Batch / Powershell中使用任何软件...
或DOS盒子...或Powershell盒子...

您还可以安装大量出色的软件包
确实有效...像nginX或PHP ... 我什至在IIS中使用Cygwin PHP软件包...

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

答案 30 :(得分:0)

可能是Everything吗?它支持正则表达式,并且还具有控制台实用程序。

答案 31 :(得分:0)

TL; DR:ripgrep

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

这是快速Look at this performance comparison with similar tools。它还对工具的设计有很多解释。内容丰富且令人讨厌。 =)

支持POSIX grep工具支持的多种功能。 Look at the comparison by ack author here

如果您有Scoop,则可以使用scoop install ripgrep安装它。否则前往installation section of the doc