Существует ли в Windows утилита сопоставления с образцом, такая как GREP? - PullRequest
164 голосов
/ 13 сентября 2009

Существует ли утилита, аналогичная grep, доступная из командной строки Windows, или для нее есть сторонний инструмент?

Ответы [ 30 ]

0 голосов
/ 13 сентября 2009

Если вы не возражаете против оплаченного продукта, PowerGREP - мой личный фаворит.

0 голосов
/ 06 декабря 2011

Коммерческая утилита grep доступна от Oak Road Systems .

0 голосов
/ 13 сентября 2009

Если вам нужно использовать «голую» Windows, то в дополнение к указанному выше параметру Powershell вы можете использовать VBScript, который имеет достойную поддержку RegEx.

MS также имеет приличную область сценариев в Technet с множеством примеров для администраторов.

0 голосов
/ 03 февраля 2019

Я понимаю, что это старый вопрос, но я наткнулся на этот пост в поисках ответа. И я нашел один, так что добавив его сюда для коллективной памяти в Интернете

Powershell: Select-String Модуль: Microsoft.PowerShell.Utility

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

и информативное сообщение в блоге с расширенными примерами: «Как выполнить grep в PowerShell» https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Простой пример из этого поста в блоге: кошка package.json | Select-String -Pattern веб-пакет ls ./src/components/ | Select-String -Pattern View

C:> cat post.md | Select-String -Pattern "^ \ w *:"

0 голосов
/ 04 февраля 2010

Просто попробуйте Java-утилиту LikeGrep. Это может помочь вам во многих случаях. По вашему желанию он также может заменить некоторый текст, найденный в файлах. Он гарантирует работу с большими файлами (проверено до 8 Гб)

0 голосов
/ 29 января 2018

Я знаю, что это немного старая тема, но вот еще одна вещь, которую вы можете сделать. Я работаю на виртуальной машине разработчика без доступа в Интернет и довольно ограниченного свободного дискового пространства, поэтому я использовал установленную на ней 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 %*

и добавьте c: \ jgrep в конец переменной среды PATH.

Теперь просто позвоните jgrep "expression" file.txt из любой точки мира.

Мне нужно было напечатать некоторые конкретные группы из моего выражения, поэтому я добавил модификатор и назвал его как jgrep -printGroup=1 "expression" file.txt.

0 голосов
/ 04 февраля 2010

Как упоминалось выше, проект gnuwin32 имеет версию grep для Windows CLI.

Если вы хотите что-то с графическим интерфейсом, я бы порекомендовал инструмент (с открытым исходным кодом) AstroGrep .

0 голосов
/ 13 сентября 2009

Недавно мы использовали PowerGREP для некоторых довольно сложных массовых операций с тысячами файлов. Включение регулярного выражения в содержимом файлов PDF и изменение документов PDF в крупном масштабе.

Это стоит денег, если вы хотите сэкономить время на труде. Вы можете попробовать это, прежде чем купить, я думаю.

0 голосов
/ 24 апреля 2019

Использовать Cygwin ...

32- и 64-битные версии
и он отлично работает с Windows 2000 (*)
на Windows 10 или на сервер 2019

Давно пользуюсь Cygwin ...
и недавно попытался заменить Windows-Linux-подсистем ...

недолго ...
Я быстро вернулся к Cygwin снова ...

гораздо более гибкий, управляемый и богатый ...
также менее навязчиво ...

просто добавьте \ bin к пути ...
и вы можете использовать это любое программное обеспечение в Windows / Batch / Powershell ...
или в DOS-коробке ... или в Powershell-коробке ...

Также вы можете установить тонну отличных пакетов
это действительно работает ... как nginX или PHP ... Я даже использую пакет Cygwin PHP в своем IIS ...

В качестве бонуса вы также можете использовать его из оболочки bash ...
(Я думаю, что это было первоначальное намерение; -))

0 голосов
/ 04 февраля 2010

Прошло много времени с тех пор, как я их использовал, но Borland (сейчас Embarcadero) включил grep командной строки со своим компилятором C / C ++. Некоторое время они сделали доступной свою версию 5.5 как бесплатную после регистрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...