Gibt es ein Pattern Matching Utility wie GREP in Windows?

179

Gibt es ein ähnliches Dienstprogramm wie in grepder Windows-Eingabeaufforderung oder gibt es ein Drittanbieter-Tool dafür?

Chintan Shah
quelle

Antworten:

238

Es gibt ein Befehlszeilentool namens FINDSTR, das mit allen Betriebssystemen der Windows NT-Klasse geliefert wird (geben Sie es FINDSTR /?in ein Eingabeaufforderungsfenster ein, um weitere Informationen zu erhalten). Es unterstützt nicht alles, grepfunktioniert jedoch möglicherweise für Ihre Anforderungen.

Ken Keenan
quelle
7
Vielen Dank! Es ist nicht grep, aber ich möchte in der Lage sein, ohne zusätzliche Software auf den Computern anderer Leute zu installieren, und das wird es mir ermöglichen.
Salbei
42
Sie können es auch mit dem netstat -n | FINDSTR 3389
Rohrsymbol verwenden
3
@sage, mit etwas Kreativität, funktioniert findstr genau wie grep. Weitere Informationen finden Sie in diesem Beispiel für Windows .
Mkyong
2
@mkyong - ich stimme zu. Ich wollte nicht behaupten, dass es irgendwie unvollständig ist, nur dass es anders ist und die Verwendung von mehr Werkzeugen mehr Arbeit erfordert. Abgesehen davon ist findstr jetzt mein bevorzugtes Werkzeug, wenn ich die Computer anderer verwende, aber ich muss mein Gedächtnis jedes Mal auf Syntax aktualisieren, wenn ich es verwende.
Salbei
1
@gonzobrains: Es ist einfach nicht so gut dokumentiert. Soweit ich das beurteilen kann, war es immer an der Windows NT-Eingabeaufforderung verfügbar - sicherlich war es in Windows NT 4 verfügbar, aber ich weiß nichts über Windows 3.5x. Die Eingabeaufforderung wurde damals von Microsoft als "Bürger zweiter Klasse" angesehen, dass viele nützliche Befehlszeilenprogramme in der Dokumentation übersehen wurden
Ken
35

PowerShell (standardmäßig in Windows 7 / 2008R2 enthalten, optional für XP / 2003 / Vista / 2008), das das select-stringCmdlet für diesen Zweck enthält.

Richard
quelle
10
Während Select-String (alias: sls) reguläre Ausdrücke verwendet, werden einige grundlegende Funktionen wie die Verzeichnisrekursion nicht unterstützt. Dazu müssen Sie mehrere PowerShell-Befehle kombinieren. Wie "dir -R -Include * .txt | sls" ^ My Regex String $ "
yzorg
33

Grep für Windows von GnuWin Project (02.10.2014: Es ist veraltet, siehe Kommentare unten)

Gregor
quelle
1
Dies ist der GnuWin32-Grep. Es wurde nicht auf die neueste Version von grep aktualisiert. Dafür benötigen Sie die Cygwin-Version. Siehe Kommentar unten.
JPaget
27

Wie bereits erwähnt, funktioniert findstr einwandfrei. Beispiel:

C:> dir | findstr Windows

11/06/2013 09:55 PM Windows

Paralleluniversum
quelle
11

Cygwin grep und mehr;)

sdu
quelle
2
Sie müssen nicht das gesamte Cygwin-Paket installieren, um Cygwin grep auszuführen. Sie benötigen nur etwa 5 DLLs: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll und cyggce_s-1.dll.
JPaget
Ich benutze Cygwin schon lange ... und versuche kürzlich, es durch Windows-Linux-Subsysteme zu ersetzen ... nicht lange ... ZURÜCK ZU CYGWIN ... viel umfangreicher und weniger aufdringlich ... füge einfach <cygwin hinzu > \ bin zum Pfad ... und Sie können es in Windows / Batch / Powershell verwenden ... in der DOS-Box ... in einer Powershell-Box ... usw. usw. - GROSSES WERKZEUG! !!
ZEE
11

Ich habe auch eine weitere Möglichkeit gefunden, GREP-ähnliche Funktionen in Windows 7 und höher ohne zusätzliche Anwendung für die Installation zu verwenden. Auf älteren Systemen können Sie Powershell installieren.

In Powershell kann der Benutzer Where-Object verwenden. Es verfügt über umfassende Funktionen, die alle Funktionen von GREP und mehr bieten.

Ich hoffe es hilft.

Chintan Shah
quelle
10

Ich bin überrascht, dass niemand FINDSTR erwähnt hat . Ich bin kein grep poweruser, aber findstr macht das, was ich brauche, filtert Dateien und stdin mit etwas primitiver Regex-Unterstützung. Wird mit Windows und all dem geliefert. (Edit: Nun, jemand hat findstr erwähnt, es ist spät, denke ich)

Svend
quelle
5
"Niemand hat FINDSTR erwähnt" - die "beste" Antwort ist ein Jahr älter und erwähnt FINDSTR ...
Chiccodoro
6

GnuWin32 ist erwähnenswert und bietet eine native Win32-Version aller Standard-Linux-Tools, einschließlich grep, file, sed, groff, indent usw.

Und es wird ständig aktualisiert, wenn neue Versionen dieser Tools veröffentlicht werden.

Diaa Sami
quelle
Es scheint jetzt auf choclatey verfügbar zu sein, also arbeitet cinst GnuWin32 daran , es schnell zu installieren.
Stuart Axon
4

Unter Windows verwende ich Far Manager für die Dateisuche. BSD lizenziert, arbeitet in der Konsole, spart Zeit bei der Eingabe von cmdline-Parametern. Hier ist der Suchdialog, der von Alt-F7 aufgerufen wird.Alt-F7

anatoly techtonik
quelle
4

Update: Dies stimmte nicht, als die Frage ursprünglich gestellt wurde, aber jetzt lässt Microsoft das Windows-Subsystem für Linux installieren , und Windows führt dann grep aus. Führen Sie in PowerShell Folgendes aus:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
woodvi
quelle
Ich habe es versucht, aber es gibt diesen Fehler: 'Enable-WindowsOptionalFeature' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batch-Datei erkannt. Danke übrigens.
Sandun
Vielen Dank. Ich werde das versuchen. ;)
Sandun
3

UnxUtils ist eine großartige Sammlung von Unix-Dienstprogrammen, die unter Windows ausgeführt werden. Es hat grep, sed, gawk, etc.

Andy White
quelle
3
UnxUtils wird seit Jahren nicht mehr gewartet. Verwenden Sie stattdessen GnuWin32 oder Cygwin.
JPaget
Gnu unter Windows (Gow) ist vollständiger als GnuWin32: github.com/bmatzelle/gow/wiki
Simon D
3

Agent Ransack , ein ausgezeichnetes und sehr schnelles Dienstprogramm zur Dateisuche , unterstützt die Suche nach regulären Ausdrücken. Es ist in erster Linie ein GUI-Dienstprogramm, es ist jedoch auch eine Befehlszeilenschnittstelle verfügbar.

JPaget
quelle
2

Im Windows-Reskit gibt es ein Dienstprogramm namens "qgrep". Möglicherweise haben Sie es bereits auf Ihrer Box. ;-) Es kommt auch mit dem "Schwanz" Befehl, Gott sei Dank!

Jubal
quelle
1

Obwohl weder Microsoft Grep noch die Befehlszeile technisch verfügbar sind, verfügen sowohl Microsoft Visual Studio als auch Notepad ++ über eine sehr gute Funktion zum Suchen in Dateien mit vollständiger Unterstützung für reguläre Ausdrücke. Ich benutze sie häufig, obwohl ich auch die CygWin-Version von grep in der Befehlszeile habe.

GBegen
quelle
1

Ich werde meine $ 0.02 zu diesem Thread hinzufügen. dnGREP ist ein großartiges Open-Source-Grep-Tool für Windows, das Rückgängigmachen, Windows Explorer-Integration, Suchen in PDFs, Zips, DOCs und vielen anderen Dingen unterstützt ...

stankovski
quelle
1

Ja, es gibt nur ein Programm für Windows-PCs mit einer soliden Benutzeroberfläche, und es ist für mich von wesentlicher Bedeutung. Ich arbeite als Entwickler und installiere auf jedem Computer, den ich hatte, als erstes das XFind-Programm. Es wurde 1997 erstellt und bis jetzt ist die Version 1.0 und funktioniert bis jetzt und es ist das Beste. Häufig muss ich nach einer Zeichenfolge in " .cs", " .aspx", " .sct" (Visual FoxPro-Formularcodedatei) oder einfach " . *" Suchen, und XFind scannt alle Dateien und zeigt mir Dateien an dass Sie sehen können, wo sich die Zeichenfolge in der Datei befindet. XFind hat auch eine Art Editor. Wenn es sich um eine Binärdatei handelt, wird die gefundene Zeichenfolge angezeigt. Probieren Sie es aus und verwenden Sie es für immer, wenn Sie Entwickler wie ich sind.

Shixx
quelle
1

Sie haben offensichtlich viele verschiedene Empfehlungen erhalten.
Meine persönliche Wahl für ein kostenloses Dienstprogramm eines Drittanbieters ist: Agent Ransack
Agent Ransack Download
Trotz seines etwas verwirrenden Namens funktioniert es gut und kann auf verschiedene Arten zum Auffinden von Dateien verwendet werden.

Viel Glück

Dhugalmac
quelle
0

Wenn Ihnen ein kostenpflichtiges Produkt nichts ausmacht, ist PowerGREP mein persönlicher Favorit.

David Andres
quelle
0

Wir haben kürzlich PowerGREP für einige ziemlich fortgeschrittene Massenoperationen mit Tausenden von Dateien verwendet. Einschließlich Regex-Suche in den Inhalt von PDF-Dateien und Ändern von PDF-Dokumenten in großem Maßstab.

Es ist das Geld wert, wenn Sie Zeit durch manuelle Arbeit sparen möchten. Sie können es versuchen, bevor Sie kaufen, denke ich.

Lars Udengaard
quelle
0

Wenn Sie Windows verwenden müssen, können Sie zusätzlich zu der oben genannten Powershell-Option VBScript verwenden, das eine angemessene RegEx-Unterstützung bietet.

MS hat auch einen anständigen Skriptbereich auf Technet mit einer Menge Beispielen für Administratoren.

Ron Rubel
quelle
0

Probieren Sie einfach das Java-Dienstprogramm LikeGrep aus. Es kann Ihnen in sehr vielen Fällen helfen. Wie Sie möchten, kann es auch Text ersetzen, der in Dateien enthalten ist. Es garantiert seine Arbeit an großen Dateien (bis zu 8 GB getestet)

Igor
quelle
0

Wie oben erwähnt, verfügt das gnuwin32-Projekt über eine Windows-CLI-Version von grep.

Wenn Sie etwas mit einer grafischen Oberfläche möchten, würde ich das (Open-Source-) Tool AstroGrep empfehlen .

bta
quelle
0

Es ist schon eine Weile her, seit ich sie verwendet habe, aber Borland (jetzt Embarcadero) hat einen Befehlszeilen-Grep in ihren C / C ++ - Compiler aufgenommen. Seit einiger Zeit stellen sie ihre 5.5-Version nach der Registrierung als kostenlosen Download zur Verfügung .

GreenMatt
quelle
0

Ich empfehle PowerGrep

Ich musste vor einigen Jahren ein E-Discovery-Projekt durchführen. Ich fand, dass fisdstres einige Einschränkungen gab, vor allem würde fisdstr irgendwann scheitern

Das Skript musste Tausende von Dateien mit ein paar Dutzend Suchbegriffen / -phrasen durchsuchen.

Cygwins Grep funktionierte viel besser , es drosselte nicht oft, aber letztendlich ging ich zu PowerGrep, weil die grafische Oberfläche es viel einfacher machte zu erkennen, wann und wo es abgestürzt war, und es war auch wirklich einfach, in allen Bedingungen zu bearbeiten und das auszugeben Ich wollte. Letztendlich war PowerGrep der zuverlässigste der drei.

Haggisbreath
quelle
0

Ich weiß, dass es ein etwas altes Thema ist, aber hier ist eine andere Sache, die Sie tun können. Ich arbeite auf einer Entwickler-VM ohne Internetzugang und mit sehr begrenztem freiem Speicherplatz, daher habe ich das darauf installierte Java verwendet.

Kompilieren Sie ein kleines Java-Programm, das Regex-Übereinstimmungen auf der Konsole druckt. Platzieren Sie das Glas irgendwo auf Ihrem System, erstellen Sie einen Stapel, um es auszuführen, und fügen Sie den Ordner Ihrer PATH-Variablen hinzu:

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 (zusammen mit jgrep.jar):

@echo off
java -cp c:\jgrep\jgrep.jar com.jgrep.JGrep %*

und füge c: \ jgrep hinzu am Ende der Umgebungsvariablen PATH .

Jetzt einfach anrufen jgrep "expression" file.txt von überall an.

Ich musste einige bestimmte Gruppen aus meinem Ausdruck drucken, also fügte ich einen Modifikator hinzu und nannte ihn wie jgrep -printGroup=1 "expression" file.txt.

mihail
quelle
0

Mir ist klar, dass es eine alte Frage ist, aber ich bin auf diesen Beitrag gestoßen, um eine Antwort zu finden. Und ich habe einen gefunden, der ihn hier für das kollektive Internetgedächtnis hinzufügt

Powershell: Select-String-Modul: Microsoft.PowerShell.Utility

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

und ein informativer Blog-Beitrag mit erweiterten Beispielen: "Wie man in PowerShell" grep " https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Ein einfaches Beispiel aus diesem Blog-Beitrag: cat package.json | Select-String -Pattern-Webpack ls ./src/components/ | Select-String-Musteransicht

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

Blackweta
quelle
0

Verwenden Sie Cygwin ...

Es hat 32- und 64-Bit-Versionen
und funktioniert einwandfrei von Windows 2000 (*)
bis Windows 10 oder Server 2019

Ich benutze Cygwin schon lange ...
und habe kürzlich versucht, es durch Windows-Linux-Subsysteme zu ersetzen ...

nicht lange ...
Ich ging schnell wieder nach Cygwin zurück ...

viel flexibler, kontrollierbarer und reichhaltiger ...
auch weniger aufdringlich ...


Fügen Sie einfach \ bin zum Pfad hinzu ... und Sie können es in Windows / Batch / Powershell verwenden ...
oder in einer DOS-Box ... oder in einer Powershell-Box ...

Sie können auch eine
Menge großartiger Pakete installieren , die wirklich funktionieren ... wie nginX oder PHP ... Ich verwende sogar das Cygwin PHP-Paket in meinem IIS ...

Als Bonus kannst du es auch aus einer Bash-Shell verwenden ...
(Ich denke, das war die ursprüngliche Absicht ;-))

ZEE
quelle