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


179

grepWindowsコマンドプロンプトから利用できる同様のユーティリティはありますか、それともサードパーティのツールはありますか?

回答:


238

FINDSTRすべてのWindows NTクラスのオペレーティングシステムに付属しているコマンドラインツールがあります(FINDSTR /?詳細については、コマンドプロンプトウィンドウに入力してください)grep


7
ありがとう!それはgrepではありませんが、他の人のマシンに追加のソフトウェアをインストールしなくても機能できるようにしたいのですが、これでうまくいきます。
セージ

42
パイプ記号とともに使用することもできます。例netstat -n | FINDSTR 3389
harperville

3
@sageは、いくつかの創造性を備えており、findstrは grepとまったく同じように機能します。Windowsの例については、このgrepを参照してください。
mkyong 2014年

2
@mkyong-同意する。私はそれが何らかの形で不完全であることを示唆するつもりはありませんでした、それが異なるだけで、より多くのツールを使用することはより多くの作業を必要とします。そうは言っても、findstrは他の人のコンピューターを使用するときに私のお気に入りのツールですが、使用するたびに構文上の記憶を更新する必要があります。
セージ2014

1
@gonzobrains:十分に文書化されていないだけです。私の知る限り、これは常にWindows NTコマンドプロンプトから利用できます。確かに、Windows NT 4でも利用できましたが、Windows 3.5xについては知りません。コマンドプロンプトを☹️当時の便利なコマンドラインユーティリティの多くがされていることを文書で見落とさMicrosoftが、このようなA「二級市民」と考えられていた
ケン・キーナンを

35

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


10
Select-String(エイリアス:sls)は正規表現を使用しますが、ディレクトリ再帰のようないくつかの基本的な機能をサポートしていません。そのためには、複数のPowerShellコマンドを組み合わせる必要があります。「dir -R -Include * .txt | sls "^ My Regex String $"
yzorg

33

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


1
これはGnuWin32 grepです。grepの最新バージョンに更新されていません。そのためには、Cygwinバージョンを入手する必要があります。以下のコメントを参照してください。
JPaget


11

Cygwin grepなど;)


2
Cygwin grepを実行するためにCygwinパッケージ全体をインストールする必要はありません。必要なDLLは、cygpcre-0.dll、cygpcreposix-0.dll、cygwin1.dll、cygintl-8.dll、cyggce_s-1.dllの5つだけです。
JPaget

私は長い間Cygwinを使用しています...そして最近はWindows-Linux-Subsystemsに置き換えようとしています...長くはありません... > \ bin to the path ...そして、Windows / Batch / Powershell ...のDOS-Boxで... Powershell-Boxで...などなど、あらゆるウェアを使用できます---すばらしいツールです! !!
ZEE

11

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

ではPowerShellの、ユーザーが使用することができますどこで、オブジェクトを、それがプラスよりGREPのすべての機能を提供機能の非常に包括的なセットを持っています。

それが役に立てば幸い。


10

FINDSTRについても言及していないことに驚いています。私はgrepのパワーユーザーではありませんが、findstrは必要なことを行い、ファイルと標準入力をフィルタリングし、いくつかのプリミティブな正規表現をサポートします。Windowsなどすべてに同梱されています。(編集:まあ誰かがfindstrに言及しました、それは遅いと思います)


5
「誰もFINDSTRについて言及していない」-「最良の」答えは1年前で、FINDSTRについて言及しています...
チッコドロ

6

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

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


choclateyで利用できるようになったので、cinst GnuWin32を使用し てすばやくインストールできます。
スチュアートアクソン2013

4

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


4

更新:質問が最初に出されたときはこれは当てはまりませんでしたが、今ではMicrosoftがLinux用のWindowsサブシステムをインストールできるようにしており、Windowsはgrepを実行します。PowerShellで、次を実行します。

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

試してみましたが、次のエラーが発生します。「Enable-WindowsOptionalFeature」は、内部または外部のコマンド、操作可能なプログラム、またはバッチファイルとして認識されません。ありがとうございます。
Sandun、


ありがとう。やってみます。;)
Sandun 2018


3

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


2

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


1

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


1

このスレッドに$ 0.02を追加します。dnGREPは、元に戻す、ウィンドウズエクスプローラーの統合、PDF、zip、DOC、その他のさまざまなものの中の検索をサポートするウィンドウズ向けの優れたオープンソースgrepツールです...


1

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


1

あなたは明らかに多くの異なる推奨を得ています。
私の個人的な無料のサードパーティユーティリティの選択は、次のとおりです。Agent Ransack
Agent Ransack Download
その名前はやや混乱を招きますが、うまく機能し、さまざまな方法でファイルを検索できます。

幸運を





0

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

あなたがマヌエル労働から時間を節約したいなら、それはお金の価値があります。購入する前に試してみてください。


0

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

MSはまた、Technetにまともなスクリプト領域を備えており、管理者向けの例がたくさんあります。


0

LikeGrep javaユーティリティーを試してください。それは非常に多くの場合にあなたを助けるかもしれません。必要に応じて、ファイルにあるテキストを置き換えることもできます。大きなファイルでの作業を保証します(最大8 Gbテスト済み)


0

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

グラフィカルインターフェイスの何かが必要な場合は、(オープンソースの)ツールAstroGrepをお勧めします。




0

PowerGrepをお勧めします

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

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

Cygwinのgrepははるかにうまく機能しましたが、頻繁に詰まることはありませんでしたが、グラフィカルインターフェースによっていつどこでクラッシュしたかがわかりやすくなり、すべての条件文と出力で編集が非常に簡単だったため、最終的にはPowerGrepに行きました。私は欲しかった。最終的に、PowerGrepは 3つの中で最も信頼性高かった


0

少し古いトピックであることは承知していますが、これはあなたができる別のことです。私はインターネットにアクセスせず、空きディスク容量が非常に限られている開発者VMで作業しているため、Javaがインストールされている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.batjgrep.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

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

Powershell:Select-Stringモジュール: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/ | 文字列の選択-パターンビュー

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


0

Cygwinを使用...

32ビットと64ビットのバージョンが
あり、Windows 2000(*)
からWindows 10またはServer 2019まで正常に動作します

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

長い間...
私はすぐに再びCygwinに戻りました...

はるかに柔軟で、制御可能で、リッチ...
また、煩わしさも少ない...

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

また、
nginXやPHPなど、実際に機能する大量の優れたパッケージをインストールすることもできます。IISでCygwin PHPパッケージを使用します...

おまけとして、washはbashシェルからも使用できます...
(これは元々の意図だったと思います;-))

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.