Có tiện ích khớp mẫu nào như GREP trong Windows không?


179

Có một tiện ích tương tự grepcó sẵn từ Windows Command Prompt, hoặc có một công cụ bên thứ ba nào cho nó không?

Câu trả lời:


238

Có một công cụ dòng lệnh được gọi là FINDSTRđi kèm với tất cả các hệ điều hành Windows NT (nhập FINDSTR /?vào cửa sổ Dấu nhắc Lệnh để biết thêm thông tin) Nó không hỗ trợ mọi thứ grepnhưng nó có thể đủ cho nhu cầu của bạn.


7
Cảm ơn! Đó không phải là grep, nhưng tôi muốn có thể hoạt động mà không cần cài đặt phần mềm bổ sung trên máy của người khác và điều này sẽ cho phép tôi.
hiền nhân

42
Bạn cũng có thể sử dụng nó với các biểu tượng ống, ví dụ:netstat -n | FINDSTR 3389
harperville

3
@sage, với một số sáng tạo, findstr hoạt động chính xác như grep. Tham khảo grep này cho ví dụ Windows .
mkyong

2
@mkyong - Tôi đồng ý. Tôi không có ý đề nghị rằng nó không hoàn chỉnh bằng cách nào đó, chỉ là nó khác biệt và sử dụng nhiều công cụ hơn đòi hỏi nhiều công việc hơn. Điều đó đang được nói, findstr là công cụ lựa chọn của tôi bây giờ khi sử dụng máy tính của người khác, nhưng tôi phải làm mới bộ nhớ của mình theo cú pháp mỗi khi tôi sử dụng nó.
hiền nhân

1
@gonzobrains: Nó chỉ là tài liệu không tốt. Theo như tôi có thể nói, nó luôn có sẵn từ dấu nhắc lệnh của Windows NT - chắc chắn, nó có sẵn trong Windows NT 4 nhưng tôi không biết về Windows 3.5x. Dấu nhắc lệnh được Microsoft coi là "công dân hạng hai" như vậy khi đó rất nhiều tiện ích dòng lệnh hữu ích đã bị bỏ qua trong tài liệu
Ken Keenan

35

PowerShell (bao gồm tiêu chuẩn trên Windows 7 / 2008R2, tùy chọn cho XP / 2003 / Vista / 2008) bao gồm select-stringlệnh ghép ngắn cho mục đích này.


10
Trong khi Chuỗi chọn (bí danh: sls) sử dụng các biểu thức thông thường, nó không hỗ trợ một số tính năng cơ bản như đệ quy thư mục. Cho rằng bạn cần kết hợp nhiều lệnh PowerShell. Giống như "dir -R -Include * .txt | sls" ^ Chuỗi Regex của tôi $ "
yzorg


27

như đã đề cập, findstr hoạt động tốt. thí dụ :

C:> thư mục | tìm Windows

11/06/2013 09:55 PM Windows


11

Cygwin grep và nhiều hơn nữa;)


2
Bạn không phải cài đặt toàn bộ gói Cygwin để chạy Cygwin grep. Bạn chỉ cần khoảng 5 DLL: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll và cyggce_s-1.dll.
JPaget

Tôi sử dụng Cygwin trong một thời gian dài ... và gần đây đã cố gắng thay thế bằng Hệ thống con Windows-Linux ... không lâu ... TRỞ LẠI CYGWIN ... phong phú hơn và ít xâm phạm hơn ... chỉ cần thêm <cygwin > \ bin theo đường dẫn ... và bạn có thể sử dụng bất kỳ phần mềm nào trong Windows / Batch / Powershell ... trong s-Box ... trong Hộp Powershell ... vv .--- CÔNG CỤ TUYỆT VỜI! !!
ZEE

11

Tôi cũng tìm thấy một cách khác để sử dụng GREP như chức năng trong Windows 7 trở lên mà không cần thêm ứng dụng nào để cài đặt và trên các hệ thống cũ hơn, bạn có thể sử dụng cài đặt Powershell.

Trong Powershell , Người dùng có thể sử dụng Where-Object, nó có bộ tính năng khá toàn diện, cung cấp tất cả các chức năng của GREP cộng thêm.

Hy vọng nó giúp.


10

Tôi ngạc nhiên không ai nhắc đến TÌM KIẾM . Tôi không phải là người sử dụng năng lượng grep, nhưng findstr thực hiện những gì tôi cần, lọc các tệp và stdin, với một số hỗ trợ regex nguyên thủy. Tàu với Windows và tất cả những thứ đó. (Chỉnh sửa: Vâng, có ai đó đã đề cập đến findstr, tôi đoán là muộn rồi)


5
"Không ai nhắc đến FINDSTR" - câu trả lời "tốt nhất" là một năm tuổi và không đề cập đến FINDSTR ...
chiccodoro

6

GnuWin32 đáng nói, nó cung cấp phiên bản Win32 gốc của tất cả các công cụ linux tiêu chuẩn, bao gồm grep, file, sed, groff, indent, v.v.

Và nó được cập nhật liên tục khi các phiên bản mới của các công cụ này được phát hành.


Bây giờ nó dường như đã có sẵn trên choclatey, vì vậy cinst GnuWin32 hoạt động để cài đặt nó một cách nhanh chóng.
Stuart Axon

4

Trên Windows tôi sử dụng Far Manager để tìm kiếm tệp. BSD được cấp phép, hoạt động trong bảng điều khiển, tiết kiệm thời gian nhập các tham số cmdline. Đây là hộp thoại tìm kiếm của nó được gọi bởi Alt-F7.Alt-F7


4

Cập nhật: Điều này không đúng khi câu hỏi ban đầu được hỏi, nhưng bây giờ Microsoft cho phép một Cài đặt hệ thống con Windows cho Linux và sau đó Windows sẽ chạy grep. Trong PowerShell, hãy chạy:

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

Tôi đã thử nó nhưng nó đưa ra lỗi này: 'Enable-WindowsOptionalFeature' không được nhận dạng như một lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó. Cảm ơn btw.
Sandun


Cảm ơn. Tôi sẽ cố gắng làm điều đó. ;)
Sandun


3

Một tiện ích tìm kiếm tệp tuyệt vời và rất nhanh, Agent Ransack , hỗ trợ tìm kiếm biểu thức thông thường. Đây chủ yếu là một tiện ích GUI, nhưng giao diện dòng lệnh cũng có sẵn.


2

Trong cửa sổ reskit có một tiện ích gọi là "qgrep". Bạn có thể có nó trên hộp của bạn rồi. ;-) Nó cũng đi kèm với lệnh "đuôi", cảm ơn chúa!


1

Mặc dù không phải là grep về mặt kỹ thuật cũng như dòng lệnh, cả Microsoft Visual Studio và Notepad ++ đều có tính năng Tìm trong tệp rất tốt với hỗ trợ biểu thức chính quy đầy đủ. Tôi thấy mình sử dụng chúng thường xuyên mặc dù tôi cũng có phiên bản grep CygWin có sẵn trên dòng lệnh.


1

Tôi sẽ thêm 0,02 đô la của tôi vào chủ đề này. dnGREP là một công cụ grep mã nguồn mở tuyệt vời cho các cửa sổ hỗ trợ hoàn tác, tích hợp windows explorer, tìm kiếm bên trong các tệp PDF, khóa, DOC và nhiều thứ khác ...


1

Có, chỉ có một chương trình cho PC Windows có GUI vững chắc và nó là thiết bị cần thiết cho tôi. Tôi làm việc như một nhà phát triển và trên mọi máy tính tôi đã có, điều đầu tiên là cài đặt chương trình XFind. Nó được tạo ra vào năm 1997 và cho đến nay phiên bản là 1.0 và cho đến nay hoạt động và nó là phiên bản tốt nhất. Thường xuyên tôi cần tìm kiếm một số chuỗi trong " .cs", " .aspx", " .sct" (tệp mã biểu mẫu Visual FoxPro) hoặc chỉ " . *" Và XFind quét tất cả các tệp và hiển thị cho tôi các tệp và một điều tuyệt vời khác là mà bạn có thể xem chuỗi ở đâu trong tệp. XFind cũng có một số loại trình soạn thảo. Nếu nó là tệp nhị phân, nó sẽ hiển thị cho bạn chuỗi tìm thấy. Hãy thử nó và sử dụng nó mãi mãi nếu bạn là nhà phát triển như tôi.


1

Bạn rõ ràng đã nhận được rất nhiều khuyến nghị khác nhau.
Lựa chọn cá nhân của tôi cho Tiện ích bên thứ 3 miễn phí là: Ransack
Agent Ransack Tải xuống
Mặc dù tên hơi khó hiểu, nó hoạt động tốt và có thể được sử dụng theo nhiều cách khác nhau để tìm tệp.

Chúc may mắn




0

Nếu bạn không quan tâm đến một sản phẩm trả tiền, PowerGREP là sản phẩm yêu thích của cá nhân tôi.


0

Gần đây chúng tôi đã sử dụng PowerGREP cho một số hoạt động hàng loạt khá tiên tiến trên hàng ngàn tệp. Bao gồm tìm kiếm regex trong nội dung của tệp PDF và thay đổi tài liệu PDF ở quy mô lớn.

Nó đáng giá tiền nếu bạn muốn tiết kiệm thời gian từ lao động manuel. Bạn có thể thử nó trước khi bạn mua tôi nghĩ.


0

Nếu bạn phải sử dụng Windows trần, ngoài tùy chọn Powershell đã lưu ý ở trên, bạn có thể sử dụng VBScript, có hỗ trợ RegEx khá tốt.

MS cũng có một khu vực kịch bản tốt trên Technet với rất nhiều ví dụ cho quản trị viên.


0

Chỉ cần thử tiện ích java LikeGrep. Nó có thể giúp bạn trong rất nhiều trường hợp. Khi bạn muốn, nó cũng có thể thay thế một số văn bản, được tìm thấy trong các tập tin. Nó đảm bảo công việc của nó trên các tệp lớn (đã kiểm tra tới 8 Gb)


0

Như đã đề cập ở trên, dự án gnuwin32 có phiên bản grep Windows CLI.

Nếu bạn muốn một cái gì đó có giao diện đồ họa, tôi muốn giới thiệu công cụ (nguồn mở) AstroGrep .


0

Đã được một thời gian kể từ khi tôi sử dụng chúng, nhưng Borland (Embarcadero bây giờ) đã bao gồm một dòng lệnh grep với trình biên dịch C / C ++ của họ. Đôi khi, họ đã cung cấp phiên bản 5.5 dưới dạng miễn phí sau khi đăng ký.



0

Tôi khuyên dùng PowerGrep

Tôi đã phải làm một dự án khám phá điện tử vài năm trước. Tôi thấy rằng fisdstrcó một số hạn chế, đặc biệt là fonomstr cuối cùng sẽ thất bại

tập lệnh phải tìm kiếm trên hàng ngàn tệp bằng cách sử dụng vài chục cụm từ / cụm từ tìm kiếm.

Grep của Cygwin hoạt động tốt hơn nhiều , nó không bị sặc thường xuyên, nhưng cuối cùng tôi đã đến PowerGrep vì giao diện đồ họa giúp dễ dàng hơn khi biết nó bị rơi khi nào và ở đâu, và cũng rất dễ chỉnh sửa trong tất cả các điều kiện và đầu ra Tôi muốn Cuối cùng, PowerGrep là đáng tin cậy nhất trong ba.


0

Tôi biết rằng đó là một chủ đề hơi cũ nhưng, đây là một điều bạn có thể làm. Tôi làm việc trên máy ảo dành cho nhà phát triển không có truy cập internet và không gian đĩa trống khá hạn chế, vì vậy tôi đã sử dụng java được cài đặt trên nó.

Biên dịch chương trình java nhỏ in regex khớp với bàn điều khiển. Đặt jar ở đâu đó trên hệ thống của bạn, tạo một lô để thực thi nó và thêm thư mục vào biến PATH của bạn:

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 (cùng với jgrep.jar):

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

và thêm c: \ jgrep vào cuối biến môi trường PATH.

Bây giờ chỉ cần gọi jgrep "expression" file.txttừ bất cứ đâu.

Tôi cần in một số nhóm cụ thể từ biểu thức của mình vì vậy tôi đã thêm một công cụ sửa đổi và gọi nó như thế nào jgrep -printGroup=1 "expression" file.txt.


0

Tôi nhận ra đó là một câu hỏi cũ nhưng tôi đã xem qua bài đăng này để tìm câu trả lời. Và tôi đã tìm thấy một cái để thêm nó vào đây cho bộ nhớ internet tập thể

Powershell: Mô-đun chuỗi chọn: Microsoft.PowerShell.Utility

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select- chuỗi

và một bài đăng trên blog thông tin với các bài kiểm tra nâng cao: "Cách thức kiếm tiền trong PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Một ví dụ đơn giản từ bài đăng trên blog đó: cat pack.json | Chọn chuỗi -Praft webpack ls ./src/components/ | Chọn chuỗi-Dạng xem mô hình

C:> mèo post.md | Chọn-Chuỗi -Potype "^ \ w *:"


0

Sử dụng Cygwin ...

nó có phiên bản 32 và 64 bit
và nó hoạt động tốt từ Windows 2000 (*)
đến Windows 10 hoặc Server 2019

Tôi sử dụng Cygwin trong một thời gian dài ...
và gần đây đã cố gắng thay thế bằng Windows-Linux-subsystems ...

không lâu đâu ...
tôi nhanh chóng quay lại Cygwin lần nữa ...

linh hoạt hơn, có thể kiểm soát và giàu có hơn ...
cũng ít xâm phạm hơn ...

chỉ cần thêm \ bin vào đường dẫn ...
và bạn có thể sử dụng bất kỳ phần mềm nào trong Windows / Batch / Powershell ...
hoặc trong DOS-Box ... hoặc trong Powershell-Box ...

Ngoài ra, bạn có thể cài đặt rất nhiều gói tuyệt vời
thực sự hoạt động ... như nginX hoặc PHP ... Tôi thậm chí còn sử dụng gói Cygwin PHP trong IIS của mình ...

Là một phần thưởng, bạn cũng có thể sử dụng nó từ bash shell ...
(Tôi nghĩ rằng đây là mục đích ban đầu ;-))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.