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


当前回答

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

其他回答

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.

其中,一体化的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

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

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

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

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