Apakah ada Pattern Matching Utility seperti GREP di Windows?

179

Apakah ada utilitas serupa yang greptersedia dari Prompt Perintah Windows, atau adakah alat pihak ketiga untuk itu?

Chintan Shah
sumber

Jawaban:

238

Ada alat baris perintah yang disebut FINDSTRyang datang dengan semua sistem operasi Windows NT-kelas (ketik FINDSTR /?ke jendela Command Prompt untuk informasi lebih lanjut) Ini tidak mendukung semuanya grep, tetapi mungkin cukup untuk kebutuhan Anda.

Ken Keenan
sumber
7
Terima kasih! Ini bukan grep, tapi saya ingin dapat berfungsi tanpa menginstal perangkat lunak tambahan pada mesin orang lain dan ini akan membuat saya.
bijak
42
Anda juga dapat menggunakannya dengan simbol pipa, misalnyanetstat -n | FINDSTR 3389
harperville
3
@sage, dengan beberapa kreativitas, findstr bekerja persis seperti grep. Lihat contoh grep ini untuk Windows .
mkyong
2
@kyong - Saya setuju. Saya tidak bermaksud menyarankan bahwa itu entah bagaimana tidak lengkap, hanya saja berbeda dan menggunakan lebih banyak alat memerlukan lebih banyak pekerjaan. Yang sedang berkata, findstr adalah alat pilihan saya sekarang ketika menggunakan komputer orang lain, tetapi saya harus menyegarkan ingatan saya pada sintaks setiap kali saya menggunakannya.
bijak
1
@ gonzobrains: Hanya saja tidak didokumentasikan dengan baik. Sejauh yang saya tahu, selalu tersedia dari command prompt Windows NT - tentu saja, itu tersedia di Windows NT 4 tapi saya tidak tahu tentang Windows 3.5x. Command prompt dianggap sebagai "warga negara kelas dua" oleh Microsoft saat itu sehingga banyak utilitas baris perintah yang berguna telah diabaikan dalam dokumentasi ☹️
Ken Keenan
35

PowerShell (termasuk sebagai standar pada Windows 7 / 2008R2, opsional untuk XP / 2003 / Vista / 2008) yang mencakup select-stringcmdlet untuk tujuan ini.

Richard
sumber
10
Sementara Select-String (alias: sls) menggunakan ekspresi reguler, itu tidak mendukung beberapa fitur dasar seperti rekursi direktori. Untuk itu Anda perlu menggabungkan beberapa perintah PowerShell. Seperti "dir -R -Include * .txt | sls" ^ My Regex String $ "
yzorg
33

Grep untuk Windows oleh Proyek GnuWin (2014-10-02: Sudah usang, lihat komentar di bawah)

Gregor
sumber
1
Ini adalah grep GnuWin32. Itu belum diperbarui ke versi grep terbaru. Untuk itu Anda harus mendapatkan versi Cygwin. Lihat komentar di bawah.
JPaget
27

seperti yang disebutkan, findstr berfungsi dengan baik. contoh:

C:> dir | findstr Windows

11/06/2013 09:55 PM Windows

Alam Semesta Paralel
sumber
11

Cygwin grep dan banyak lagi;)

sdu
sumber
2
Anda tidak perlu menginstal seluruh paket Cygwin untuk menjalankan Cygwin grep. Anda hanya perlu sekitar 5 DLL: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll, dan cyggce_s-1.dll.
JPaget
Saya menggunakan Cygwin untuk waktu yang lama ... dan baru-baru ini mencoba untuk menggantikannya dengan Windows-Linux-Subsystems ... tidak untuk waktu yang lama ... KEMBALI KE CYGWIN ... jauh lebih kaya dan lebih sedikit mengganggu ... cukup tambahkan <cygwin > \ bin ke jalan ... dan Anda dapat menggunakannya di Windows / Batch / Powershell ... di s DOS-Box ... di Powershell-Box ... dll dll .--- ALAT BESAR! !!
ZEE
11

Saya juga menemukan satu cara lagi untuk memanfaatkan fungsi seperti GREP di Windows 7 dan di atasnya tanpa aplikasi tambahan untuk menginstal dan pada sistem yang lebih lama Anda dapat menggunakan install Powershell.

Di Powershell , Pengguna dapat menggunakan Where-Object yang memiliki serangkaian fitur yang cukup komprehensif yang menyediakan semua fungsi GREP plus lebih banyak.

Semoga ini bisa membantu.

Chintan Shah
sumber
10

Saya terkejut tidak ada yang menyebutkan FINDSTR . Saya bukan pengguna grep, tetapi findstr melakukan apa yang saya perlukan, memfilter file dan stdin, dengan beberapa dukungan regex primitif. Kapal dengan Windows dan semua itu. (Sunting: Yah seseorang memang menyebutkan findstr, sudah terlambat saya kira)

Svend
sumber
5
"tidak ada yang menyebutkan FINDSTR" - jawaban "terbaik" adalah satu tahun lebih tua dan menyebutkan FINDSTR ...
chiccodoro
6

GnuWin32 layak disebutkan, ia menyediakan versi asli Win32 dari semua alat linux standar, termasuk grep, file, sed, groff, indent, dll.

Dan ini terus diperbarui ketika versi baru dari alat ini dirilis.

Diaa Sami
sumber
Sekarang sepertinya tersedia di choclatey, jadi cinst GnuWin32 berfungsi untuk menginstalnya dengan cepat.
Stuart Axon
4

Di Windows saya menggunakan Far Manager untuk pencarian file. BSD berlisensi, bekerja di konsol, menghemat waktu mengetik parameter cmdline. Berikut adalah dialog pencariannya yang dipanggil oleh Alt-F7.Alt-F7

techtonik anatoly
sumber
4

Pembaruan: Ini tidak benar ketika pertanyaan awalnya diajukan, tetapi sekarang Microsoft memungkinkan satu Instal Subsistem Windows untuk Linux , dan Windows kemudian akan menjalankan grep. Di PowerShell, jalankan:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
woodvi
sumber
Saya mencobanya tetapi memberikan kesalahan ini: 'Enable-WindowsOptionalFeature' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan, atau file batch. Terima kasih btw.
Sandun
Terima kasih. Saya akan mencobanya. ;)
Sandun
3

UnxUtils adalah seperangkat utiliti Unix yang berjalan pada Windows. Memiliki grep, sed, gawk, dll.

Andy White
sumber
3
UnxUtils belum dipelihara selama bertahun-tahun. Gunakan GnuWin32 atau Cygwin sebagai gantinya.
JPaget
gnu di windows (gow) lebih lengkap daripada GnuWin32: github.com/bmatzelle/gow/wiki
Simon D
3

Utilitas pencarian file yang sangat baik dan sangat cepat, Agent Ransack , mendukung pencarian ekspresi reguler. Utamanya adalah utilitas GUI, tetapi antarmuka baris perintah juga tersedia.

JPaget
sumber
2

Di windows reskit ada utilitas yang disebut "qgrep". Anda mungkin sudah memilikinya di kotak Anda. ;-) Itu juga datang dengan perintah "ekor", terima kasih Tuhan!

Jubal
sumber
1

Meskipun tidak secara teknis grep atau baris perintah, Microsoft Visual Studio dan Notepad ++ memiliki fitur Find in Files yang sangat baik dengan dukungan ekspresi reguler penuh. Saya menemukan diri saya sering menggunakannya walaupun saya juga memiliki versi grep CygWin tersedia di baris perintah.

GBegen
sumber
1

Saya akan menambahkan $ 0,02 ke utas ini. dnGREP adalah alat grep open source untuk windows yang mendukung undo, integrasi windows explorer, mencari di dalam PDF, ritsleting, DOC, dan banyak hal lainnya ...

stankovski
sumber
1

Ya hanya ada satu program untuk PC Windows yang memiliki GUI yang solid dan ini sangat penting bagi saya. Saya bekerja sebagai pengembang dan di setiap komputer yang saya miliki, pertama-tama instal program XFind. Itu dibuat pada tahun 1997 dan sampai sekarang versi 1.0 dan sampai sekarang berfungsi dan ini adalah yang terbaik. Seringkali saya perlu mencari beberapa string dalam " .cs", " .aspx", " .sct" (file kode formulir Visual FoxPro) atau hanya " . *" Dan XFind memindai semua file dan menunjukkan kepada saya file dan hal besar lainnya adalah Anda dapat melihat di mana string dalam file. XFind juga memiliki beberapa jenis editor. Jika file biner, itu akan menunjukkan Anda string yang ditemukan. Cobalah dan gunakan selamanya jika Anda adalah pengembang seperti saya.

Shixx
sumber
1

Anda jelas mendapat banyak rekomendasi berbeda.
Pilihan pribadi saya untuk Utilitas 3 Pihak Gratis adalah: Agent Ransack
Agent Ransack Unduh
Meskipun namanya agak membingungkan, ia berfungsi dengan baik dan dapat digunakan dalam berbagai cara untuk menemukan file.

Semoga berhasil

Dhugalmac
sumber
0

Jika Anda tidak keberatan dengan produk berbayar, PowerGREP adalah favorit pribadi saya.

David Andres
sumber
0

Kami baru-baru ini menggunakan PowerGREP untuk beberapa operasi massal yang cukup maju di ribuan file. Termasuk pencarian regex dalam konten file PDF, dan mengubah dokumen PDF dalam skala besar.

Nilainya uang jika Anda ingin menghemat waktu dari tenaga kerja manuel. Anda dapat mencobanya sebelum membeli.

Lars Udengaard
sumber
0

Jika Anda harus menggunakan Windows telanjang, maka selain opsi Powershell yang disebutkan di atas, Anda dapat menggunakan VBScript, yang memiliki dukungan RegEx yang layak.

MS juga memiliki area scripting yang layak di Technet dengan banyak contoh untuk administrator.

Ron Ruble
sumber
0

Coba saja utilitas java LikeGrep. Ini dapat membantu Anda dalam banyak kasus. Seperti yang Anda inginkan, itu juga dapat mengganti beberapa teks, ditemukan dalam file. Ini menjamin pekerjaannya pada file besar (hingga 8 Gb diuji)

Igor
sumber
0

Seperti disebutkan di atas, proyek gnuwin32 memiliki grep versi Windows CLI.

Jika Anda menginginkan sesuatu dengan antarmuka grafis, saya akan merekomendasikan alat (open-source) alat AstroGrep .

bta
sumber
0

Sudah lama saya tidak menggunakannya, tetapi Borland (Embarcadero sekarang) menyertakan grep baris perintah dengan kompiler C / C ++ mereka. Untuk beberapa waktu, mereka telah menyediakan versi 5.5 mereka sebagai unduhan gratis setelah mendaftar.

GreenMatt
sumber
0

Saya merekomendasikan PowerGrep

Saya harus melakukan proyek e-discovery beberapa tahun yang lalu. Saya menemukan bahwa fisdstrada beberapa keterbatasan, terutama fisdstr akhirnya akan gagal

skrip harus mencari ribuan file menggunakan beberapa lusin istilah / frasa pencarian.

Grep Cygwin bekerja jauh lebih baik , itu tidak sering tersedak, tetapi akhirnya saya pergi ke PowerGrep karena antarmuka grafis membuatnya lebih mudah untuk mengetahui kapan dan di mana crash, dan juga sangat mudah untuk mengedit di semua persyaratan dan output yang Aku ingin. Akhirnya PowerGrep adalah yang paling dapat diandalkan dari ketiganya.

Haggisbreath
sumber
0

Saya tahu bahwa ini adalah topik yang agak lama tetapi, ini adalah hal lain yang dapat Anda lakukan. Saya bekerja pada VM pengembang tanpa akses internet dan ruang disk kosong yang cukup terbatas, jadi saya memanfaatkan java yang diinstal di dalamnya.

Kompilasi program java kecil yang mencetak pertandingan regex ke konsol. Letakkan botol di suatu tempat di sistem Anda, buat batch untuk menjalankannya dan tambahkan folder ke variabel PATH Anda:

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 (bersama dengan jgrep.jar):

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

dan tambahkan c: \ jgrep di akhir variabel lingkungan PATH.

Sekarang cukup menelepon jgrep "expression" file.txtdari mana saja.

Saya perlu mencetak beberapa grup tertentu dari ekspresi saya sehingga saya menambahkan pengubah dan menyebutnya seperti jgrep -printGroup=1 "expression" file.txt.

mihail
sumber
0

Saya menyadari itu pertanyaan lama tetapi saya menemukan posting ini mencari jawaban. Dan saya telah menemukan satu sehingga menambahkannya di sini untuk memori internet kolektif

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

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

dan posting blog informatif dengan ujian tingkat lanjut: "Bagaimana cara" grep "di PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Contoh sederhana dari posting blog itu: cat package.json | Select-String -Paket web ls ./src/components/ | Select-String -Pattern View

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

blackweta
sumber
0

Gunakan Cygwin ...

ini memiliki versi 32 dan 64 bit
dan berfungsi baik dari Windows 2000 (*)
hingga Windows 10 atau Server 2019

Saya menggunakan Cygwin untuk waktu yang lama ...
dan baru-baru ini mencoba untuk menggantikan dengan Windows-Linux-Subsystems ...

tidak lama ...
Saya segera kembali ke Cygwin lagi ...

jauh lebih fleksibel, terkendali, dan kaya ...
juga kurang mengganggu ...

cukup tambahkan \ bin ke path ...
dan Anda dapat menggunakannya di Windows / Batch / Powershell ...
atau di DOS-Box ... atau di Powershell-Box ...

Anda juga dapat menginstal banyak paket hebat
yang benar-benar berfungsi ... seperti nginX atau PHP ... Saya bahkan menggunakan paket Cygwin PHP di IIS saya ...

Sebagai bonus, Anda juga dapat menggunakannya dari bash shell ...
(Saya pikir ini adalah maksud asli ;-))

ZEE
sumber