web-dev-qa-db-ja.com

WindowsにGREPのようなパターンマッチングユーティリティはありますか?

Windowsコマンドプロンプトから利用できるgrepに類似したユーティリティはありますか、またはサードパーティのツールはありますか?

163
Chintan Shah

また、Windows 7以降のGREPのような機能を、追加のアプリケーションをインストールせずに使用し、Powershellのインストールを使用できる古いシステムで使用するもう1つの方法を見つけました。

Powershell では、ユーザーは Where-Object を使用できます。これには、GREPのすべての機能に加えて、さらに包括的な機能セットがあります。

それが役に立てば幸い。

11
Chintan Shah

すべてのWindows NTクラスのオペレーティングシステムに付属するFINDSTRというコマンドラインツールがあります(詳細については、コマンドプロンプトウィンドウにFINDSTR /?と入力してください)。すべてをサポートするわけではありませんgrepしかし、それはあなたのニーズに十分かもしれません。

229
Ken Keenan

GnuWin ProjectによるGrep for Windows (2014-10-02:時代遅れです。以下のコメントを参照)

33
Gregor

この目的のためのselect-stringコマンドレットを含むPowerShell(Windows 7/2008R2に標準で含まれ、XP/2003/Vista/2008ではオプション)。

32
Richard

前述のように、findstrは正常に機能します。例:

C:> dir | findstr Windows

11/06/2013 09:55 PM Windows

24

Cygwin grepなど;)

11
sdu

誰も言及していないことに驚いています FINDSTR 。私はgrepのパワーユーザーではありませんが、findstrは必要なことを行い、いくつかの基本的な正規表現をサポートして、ファイルとstdinをフィルター処理します。 Windowsなどが同梱されています。 (編集:まあ誰かがfindstrに言及していました、それは遅いと思います)

10
Svend

GnuWin32 は言及する価値があり、grep、file、sed、groff、indentなどを含む、すべての標準LinuxツールのネイティブWin32バージョンを提供します。

そして、これらのツールの新しいバージョンがリリースされると、常に更新されます。

6
Diaa Sami

Windowsでは、ファイル検索に Far Manager を使用します。 BSDライセンス、コンソールで動作、cmdlineパラメーターの入力時間を節約。 Alt-F7によって呼び出される検索ダイアログは次のとおりです。 Alt-F7

4

更新:質問が最初に尋ねられたとき、これは真実ではありませんでしたが、Microsoftは1つ Linux用Windowsサブシステムのインストール を許可し、Windowsはgrepを実行します。 PowerShellで、次を実行します。

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

nxUtils は、Windowsで実行されるUnixユーティリティの素晴らしいセットです。 grep、sed、gawkなどがあります。

3
Andy White

優れた非常に高速なファイル検索ユーティリティ Agent Ransack は、正規表現検索をサポートしています。これは主にGUIユーティリティですが、コマンドラインインターフェイスも使用できます。

3
JPaget

Windows Reskitには、「qgrep」というユーティリティがあります。あなたはすでにあなたの箱にそれを持っているかもしれません。 ;-)また、「tail」コマンドが付属しています、神に感謝します!

2
Jubal

技術的にはgrepやコマンドラインではありませんが、Microsoft Visual Studioと Notepad ++ の両方には、完全な正規表現をサポートする非常に優れたファイル内検索機能があります。コマンドラインでCygWinバージョンのgrepを使用できる場合でも、頻繁に使用していることに気付きます。

1
GBegen

はい、Windows PCにはGUIが1つしかないプログラムが1つしかなく、それは私にとって不可欠なユーティリティです。私は開発者として働いており、持っているすべてのコンピューターにまずXFindプログラムをインストールします。これは1997年に作成され、現在までバージョンは1.0であり、現在まで機能し、最高です。 "。cs"、 "。aspx"、 "。sct"(Visual FoxProフォームコードファイル)または単に "。*"で文字列を検索する必要があることがよくありますXFindはすべてのファイルをスキャンしてファイルを表示しますが、もう1つの素晴らしい点は、ファイル内の文字列の場所を確認できることです。 XFindには何らかのエディターもあります。バイナリファイルの場合、見つかった文字列が表示されます。あなたが私のような開発者であれば、試してみて永遠に使用してください。

1
Shixx

このスレッドに$ 0.02を追加します。 dnGREP は、元に戻す、windowsエクスプローラーの統合、PDF、zip、DOC、およびその他のものの内部検索をサポートする、windows用の優れたオープンソースgrepツールです...

1
stankovski

明らかに、多くの異なる推奨事項があります。
無料のサードパーティユーティリティの個人的な選択:エージェントランサック
Agent Ransack Download
多少わかりにくい名前ですが、うまく機能し、さまざまな方法でファイルを見つけることができます。

がんばろう

1
Dhugalmac

使用してからしばらく経ちましたが、Borland(Embarcaderoは現在)には、C/C++コンパイラにコマンドラインgrepが含まれていました。しばらくの間、彼らは登録後に5.5バージョンを 無料ダウンロード として利用可能にしました。

0
GreenMatt

Oak Road Systems から市販のgrepユーティリティを入手できます。

0
JPaget

Cygwinを使用...

32ビット版と64ビット版があります
それはWindows 2000で正常に動作します(*)
Windows 10またはServer 2019へ

Cygwinを長い間使用しています...
最近Windows-Linux-Subsystemsに置き換えようとしました...

長くない...
すぐに再びCygwinに戻りました...

はるかに柔軟性があり、制御可能でリッチです...
また、邪魔にならない...

パスに\ binを追加するだけです...
Windows/Batch/Powershellで任意のウェアを使用できます.
またはDOS-Box ...またはPowershell-Box ...

また、たくさんの素晴らしいパッケージをインストールできます
これは本当に機能します... nginXやPHPのように... Cygwin PHPパッケージをIISでも使用します...

ボーナスとして、bash Shellからも使用できます...
(これは本来の意図だったと思う;-))

0
ZEE

Bare Grep は、GUIが必要な場合に適しています。 Gnu grep はCLIに適しています

0
Ariel

有料製品を気にしないなら、PowerGREPが私の個人的なお気に入りです。

0
David Andres

LikeGrep Javaユーティリティを試してください。非常に多くの場合に役立ちます。必要に応じて、ファイル内のテキストを置き換えることもできます。大きなファイルでの作業を保証します(最大8 Gbテスト済み)

0
Igor

最近、数千のファイルに対するかなり高度な一括操作に PowerGREP を使用しました。 PDFファイルのコンテンツに正規表現検索を含め、大規模にPDFドキュメントを変更します。

マヌエルの労働から時間を節約したいなら、その価値はあります。購入する前に試してみることができます。

0
Lars Udengaard

私はそれが少し古いトピックであることを知っていますが、ここであなたができるもう一つのことです。インターネットにアクセスできず、空きディスク容量が非常に限られている開発者VMに取り組んでいるので、そこにインストールされた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のように呼び出します。

0
mihail

古い質問に気づきましたが、答えを探してこの投稿に出会いました。そして、私はそれを見つけたので、ここに集合的なインターネットの記憶のためにそれを追加します

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/ =

そのブログ投稿からの簡単な例:cat package.json | Select-String -Pattern webpack ls ./src/components/ | Select-String-パターンビュー

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

0
blackweta

オールインワンbusyboxにはgrep/egrep/sed/awkなどが含まれます

から入手する:

またはいくつかの古い

0
Bernhard

上記のように、gnuwin32プロジェクトにはWindows CLIバージョンのgrepがあります。

グラフィカルインターフェイスを使用したい場合は、(オープンソース)ツール AstroGrep をお勧めします。

0
bta

ベアWindowsを使用する必要がある場合は、上記のPowershellオプションに加えて、適切なRegExサポートを備えたVBScriptを使用できます。

また、MSにはTechnetに適切なスクリプト領域があり、管理者向けのサンプルが多数あります。

0
Ron Ruble

お勧めしますPowerGrep

数年前に電子情報開示プロジェクトを行わなければなりませんでした。 fisdstrにはいくつかの制限があり、特にfisdstrが最終的に失敗することがわかりました

スクリプトは、数十の検索用語/フレーズを使用して、数千のファイルを検索する必要がありました。

Cygwinのgrepははるかにうまく機能しました、それは頻繁に窒息しませんでしたが、最終的に私はPowerGrepに行きましたクラッシュしました。また、必要なすべての条件と出力を編集するのは本当に簡単でした。最終的にPowerGrepは3つの中で最も信頼性の高いでした。

0
Haggisbreath