Czy w systemie Windows jest narzędzie do dopasowywania wzorców, takie jak GREP?

179

Czy istnieje podobne narzędzie, które jest grepdostępne z wiersza polecenia systemu Windows, czy jest do tego narzędzie strony trzeciej?

Chintan Shah
źródło

Odpowiedzi:

238

Istnieje narzędzie wiersza polecenia, FINDSTRktóre jest dostarczane ze wszystkimi systemami operacyjnymi klasy Windows NT (wpisz FINDSTR /?więcej informacji w oknie wiersza polecenia). Nie obsługuje wszystkiego grep, ale może być wystarczające dla twoich potrzeb.

Ken Keenan
źródło
7
Dzięki! To nie jest grep, ale lubię być w stanie funkcjonować bez instalowania dodatkowego oprogramowania na komputerach innych ludzi, a to pozwoli mi.
mędrzec
42
Możesz go również użyć z symbolem rury, np.netstat -n | FINDSTR 3389
harperville
3
@sage, z pewną kreatywnością, findstr działa dokładnie tak samo jak grep. Zobacz przykład grep dla Windows .
mkyong
2
@mkyong - zgadzam się. Nie chciałem sugerować, że jest to w jakiś sposób niekompletne, tylko że jest inne, a używanie większej liczby narzędzi wymaga więcej pracy. To powiedziawszy, findstr jest teraz moim ulubionym narzędziem podczas korzystania z komputerów innych osób, ale muszę odświeżać pamięć składni za każdym razem, gdy go używam.
mędrzec
1
@gonzobrains: To nie jest tak dobrze udokumentowane. O ile mi wiadomo, zawsze był dostępny z wiersza polecenia systemu Windows NT - z pewnością był dostępny w systemie Windows NT 4, ale nie wiem o systemie Windows 3.5x. Wiersz polecenia był wówczas uważany przez Microsoft za „obywatela drugiej kategorii”, dlatego w dokumentacji przeoczono wiele przydatnych narzędzi wiersza polecenia ☹️
Ken Keenan,
35

PowerShell (dołączony jako standard w Windows 7 / 2008R2, opcjonalny dla XP / 2003 / Vista / 2008), który zawiera select-stringdo tego celu polecenie cmdlet.

Richard
źródło
10
Chociaż Select-String (alias: sls) używa wyrażeń regularnych, nie obsługuje niektórych podstawowych funkcji, takich jak rekurencja katalogu. W tym celu musisz połączyć wiele poleceń PowerShell. Jak „dir -R -Include * .txt | sls” ^ My Regex String $ ”
yzorg
33

Grep dla Windows autorstwa GnuWin Project (02.10.2014: Jest nieaktualny, zobacz komentarze poniżej)

Gregor
źródło
1
To jest grep GnuWin32. Nie został zaktualizowany do najnowszej wersji grep. W tym celu musisz uzyskać wersję Cygwin. Zobacz komentarz poniżej.
JPaget,
27

jak wspomniano, findstr działa dobrze. przykład:

C:> reż | findstr Windows

11/06/2013 21:55 Windows

Wszechświat równoległy
źródło
11

Cygwin grep i więcej;)

sdu
źródło
2
Nie musisz instalować całego pakietu Cygwin, aby uruchomić Cygwin grep. Potrzebujesz tylko około 5 bibliotek DLL: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll i cyggce_s-1.dll.
JPaget,
Używam Cygwina od dłuższego czasu ... a ostatnio próbuję zastąpić podsystemy Windows-Linux ... nie na długo ... WRÓĆ DO CYGWIN ... o wiele bogatszy i mniej nachalny ... po prostu dodaj <cygwin > \ bin do ścieżki ... i można go używać w systemie Windows / Batch / Powershell ... w DOS-Box ... w Powershell-Box ... itd. itd. - WIELKIE NARZĘDZIE! !!
ZEE
11

Znalazłem też jeszcze jeden sposób korzystania z funkcjonalności podobnej do GREP w Windows 7 i nowszych bez dodatkowej aplikacji do zainstalowania, a na starszych systemach możesz zainstalować Powershell.

W Powershell użytkownik może korzystać z Where-Object, który ma dość obszerny zestaw funkcji, który zapewnia wszystkie funkcje GREP i więcej.

Mam nadzieję, że to pomoże.

Chintan Shah
źródło
10

Dziwię się, że nikt nie wspomniał o FINDSTR . Nie jestem grep poweruser, ale findstr robi to, czego potrzebuję, filtruje pliki i stdin, z pewną prymitywną obsługą wyrażeń regularnych. Dostarczane z systemem Windows i tym podobne. (Edytuj: Cóż, ktoś wspomniał o findstr, chyba późno)

Svend
źródło
5
„nikt nie wspomniał o FINDSTR” - „najlepsza” odpowiedź jest o rok starsza i nie wspomina o FINDSTR ...
chiccodoro
6

GnuWin32 Warto wspomnieć, że zapewnia natywną wersję Win32 wszystkich standardowych narzędzi Linux, w tym pliku, grep, sed, groffa tiret itp

I jest stale aktualizowany, gdy są wypuszczane nowe wersje tych narzędzi.

Diaa Sami
źródło
Teraz wydaje się być dostępny na choclatey, więc cinst GnuWin32 działa, aby go szybko zainstalować.
Stuart Axon
4

W Windows używam Far Managera do wyszukiwania plików. BSD na licencji, działa w konsoli, oszczędza czas na wpisywaniu parametrów cmdline. Oto okno wyszukiwania przywołane przez Alt-F7.Alt-F7

anatoly techtonik
źródło
4

Aktualizacja: Nie było to prawdą, kiedy pytanie zostało pierwotnie zadane, ale teraz Microsoft pozwala zainstalować Podsystem Windows dla Linuksa , a następnie Windows uruchomi grep. W PowerShell uruchom:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
woodvi
źródło
Próbowałem, ale wyświetla następujący błąd: „Enable-WindowsOptionalFeature” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy. Dzięki btw.
Sandun
Dzięki. Spróbuję tego. ;)
Sandun,
3

UnxUtils to świetny zestaw narzędzi uniksowych działających w systemie Windows. Ma grep, sed, gawk itp.

Andy White
źródło
3
UnxUtils nie był utrzymywany przez lata. Zamiast tego użyj GnuWin32 lub Cygwin.
JPaget,
gnu w systemie
Simon D
3

Doskonałe i bardzo szybkie narzędzie do wyszukiwania plików, Agent Ransack , obsługuje wyszukiwanie wyrażeń regularnych. Jest to przede wszystkim narzędzie GUI, ale dostępny jest również interfejs wiersza polecenia.

JPaget
źródło
2

W Windows reskit znajduje się narzędzie o nazwie „qgrep”. Możesz mieć go już na swoim pudełku. ;-) Jest również wyposażony w polecenie „ogon”, dzięki Bogu!

Jubal
źródło
1

Chociaż nie jest to technicznie grep ani wiersz poleceń, zarówno Microsoft Visual Studio, jak i Notepad ++ mają bardzo dobrą funkcję Znajdź w plikach z pełną obsługą wyrażeń regularnych. Często używam ich, mimo że mam również wersję greg CygWin dostępną w wierszu poleceń.

GBegen
źródło
1

Dodam moje 0,02 $ do tego wątku. dnGREP to świetne narzędzie grep typu open source dla systemu Windows, które obsługuje cofanie, integrację z Eksploratorem Windows, wyszukiwanie w plikach PDF, zamkach, DOC i wiele innych rzeczy ...

stankovski
źródło
1

Tak, jest tylko jeden program na PC z systemem Windows, który ma solidne GUI i jest to dla mnie niezbędne. Pracuję jako programista i na każdym komputerze, na którym miałem, najpierw zainstaluj program XFind. Został stworzony w 1997 roku i do tej pory wersja 1.0 i do tej pory działa i jest najlepsza. Często muszę wyszukiwać ciąg znaków w plikach.cs”, „ .aspx”, „ .sct” (plik kodu formularza programu Visual FoxPro) lub po prostu „ . *”, A XFind skanuje wszystkie pliki i wyświetla pliki, a kolejną wspaniałą rzeczą jest że możesz sprawdzić, gdzie znajduje się łańcuch w pliku. XFind ma również jakiś edytor. Jeśli jest to plik binarny, pokaże znaleziony ciąg znaków. Wypróbuj i używaj go na zawsze, jeśli jesteś programistą takim jak ja.

Shixx
źródło
1

Oczywiście otrzymałeś wiele różnych rekomendacji.
Mój osobisty wybór bezpłatnego narzędzia innej firmy to: Agent Ransack
Agent Ransack Download
Pomimo nieco mylącej nazwy, działa dobrze i może być używany na wiele sposobów do wyszukiwania plików.

Powodzenia

Dhugalmac
źródło
0

Jeśli nie masz nic przeciwko płatnemu produktowi, PowerGREP jest moim ulubionym.

David Andres
źródło
0

Ostatnio użyliśmy PowerGREP do niektórych dość zaawansowanych operacji masowych na tysiącach plików. Obejmuje wyszukiwanie wyrażeń regularnych w treści plików PDF i modyfikowanie dokumentów PDF na dużą skalę.

Warto zaoszczędzić pieniądze, jeśli chcesz zaoszczędzić czas na pracy. Myślę, że możesz spróbować przed zakupem.

Lars Udengaard
źródło
0

Jeśli musisz korzystać z samego systemu Windows, oprócz wspomnianej powyżej opcji PowerShell możesz także użyć VBScript, który ma przyzwoitą obsługę RegEx.

MS ma również przyzwoity obszar skryptów w Technet z mnóstwem przykładów dla administratorów.

Ron Ruble
źródło
0

Po prostu wypróbuj narzędzie LikeGrep java. W wielu przypadkach może ci to pomóc. Jak sobie życzysz, może również zastąpić tekst znaleziony w plikach. Gwarantuje pracę na dużych plikach (testowano do 8 Gb)

Igor
źródło
0

Jak wspomniano powyżej, projekt gnuwin32 ma wersję grep dla Windows CLI.

Jeśli chcesz czegoś z interfejsem graficznym, polecam narzędzie (open source) AstroGrep .

bta
źródło
0

Minęło trochę czasu, odkąd ich użyłem, ale Borland (teraz Embarcadero) włączył kompilator C / C ++ do grep wiersza poleceń. Od pewnego czasu udostępniają swoją wersję 5.5 do bezpłatnego pobrania po rejestracji.

GreenMatt
źródło
0

Polecam PowerGrep

Kilka lat temu musiałem wykonać projekt e-discovery. Odkryłem, że fisdstrma pewne ograniczenia, w szczególności fisdstr ostatecznie się nie powiedzie

skrypt musiał przeszukiwać tysiące plików przy użyciu kilkudziesięciu wyszukiwanych haseł / fraz.

Grep Cygwina działał znacznie lepiej , nie dusił się często, ale ostatecznie poszedłem do PowerGrep, ponieważ interfejs graficzny znacznie ułatwił określenie, kiedy i gdzie się zawiesił, a także bardzo łatwo było go edytować we wszystkich warunkach warunkowych i wyjściowych, które Chciałem. Ostatecznie PowerGrep był najbardziej niezawodny z tych trzech.

Haggisbreath
źródło
0

Wiem, że to trochę stary temat, ale tutaj jest kolejna rzecz, którą możesz zrobić. Pracuję na programistycznej maszynie wirtualnej bez dostępu do Internetu i dość ograniczonej ilości wolnego miejsca na dysku, więc skorzystałem z zainstalowanej na niej Java.

Skompiluj mały program Java, który drukuje dopasowania wyrażeń regularnych na konsoli. Umieść słoik gdzieś w systemie, utwórz partię, aby go wykonać i dodaj folder do zmiennej 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 (wraz z jgrep.jar):

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

i dodaj c: \ jgrep na końcu zmiennej środowiskowej PATH.

Teraz wystarczy zadzwonić jgrep "expression" file.txtz dowolnego miejsca.

Musiałem wydrukować określone grupy z mojego wyrażenia, więc dodałem modyfikator i nazwij go tak jgrep -printGroup=1 "expression" file.txt.

mihail
źródło
0

Zdaję sobie sprawę, że to stare pytanie, ale natknąłem się na ten post, szukając odpowiedzi. Znalazłem jeden, więc dodając go tutaj do zbiorowej pamięci internetowej

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

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

oraz pouczający post na blogu z zaawansowanymi przykładami: „Jak„ grep ”w PowerShell” https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Prosty przykład z tego postu na blogu: cat package.json | Select-String -Pattern webpack ls ./src/components/ | Select-String -Pattern View

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

blackweta
źródło
0

Użyj Cygwin ...

ma wersje 32- i 64-bitowe
i działa dobrze od Windows 2000 (*)
do Windows 10 lub Server 2019

Używam Cygwin od dłuższego czasu ...
a ostatnio próbowałem zastąpić podsystemy Windows-Linux ...

nie na długo ...
szybko wróciłem do Cygwin ...

znacznie bardziej elastyczny, kontrolowany i bogaty ...
również mniej ingerujący ...

po prostu dodaj \ bin do ścieżki ...
i możesz go użyć w systemie Windows / Batch / Powershell ...
lub w DOS-Box ... lub w Powershell-Box ...

Możesz także zainstalować mnóstwo świetnych pakietów,
które naprawdę działają ... jak nginX lub PHP ... Nawet używam pakietu Cygwin PHP w moich IIS ...

Jako bonus możesz go również użyć z powłoki bash ...
(Myślę, że to była pierwotna intencja ;-))

ZEE
źródło