มี Pattern Matching Utility เช่น GREP ใน Windows หรือไม่


179

มียูทิลิตีที่คล้ายกันให้grepใช้งานได้จากพรอมต์คำสั่งของ Windows หรือมีเครื่องมือของบุคคลที่สามหรือไม่

คำตอบ:


238

มีเครื่องมือบรรทัดคำสั่งที่เรียกFINDSTRว่ามาพร้อมกับระบบปฏิบัติการ Windows NT ทุกระดับ (พิมพ์FINDSTR /?ลงในหน้าต่างพร้อมรับคำสั่งสำหรับข้อมูลเพิ่มเติม) ไม่รองรับทุกอย่างgrepแต่อาจเพียงพอสำหรับความต้องการของคุณ


7
ขอบคุณ! มันไม่ใช่ grep แต่ฉันชอบที่จะสามารถทำงานได้โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติมในเครื่องของผู้อื่นและสิ่งนี้จะทำให้ฉัน
ปราชญ์

42
นอกจากนี้คุณยังสามารถใช้กับสัญลักษณ์netstat -n | FINDSTR 3389
ไพพ์

3
@sage มีความคิดสร้างสรรค์findstrทำงานเหมือนกับ grep อ้างถึงนี้grep สำหรับ Windows ตัวอย่างเช่น
mkyong

2
@mkyong - ฉันเห็นด้วย ฉันไม่ได้ตั้งใจจะแนะนำว่ามันไม่สมบูรณ์อย่างใดเพียงแค่ว่ามันแตกต่างกันและการใช้เครื่องมือมากขึ้นต้องใช้งานมากขึ้น ที่ถูกกล่าวว่า findstr เป็นเครื่องมือที่ฉันเลือกใช้ตอนนี้เมื่อใช้คอมพิวเตอร์ของผู้อื่น แต่ฉันต้องรีเฟรชหน่วยความจำของฉันในรูปแบบไวยากรณ์ทุกครั้งที่ฉันใช้มัน
ปราชญ์

1
@gonzobrains: มันไม่ได้เป็นเอกสารที่ดี เท่าที่ฉันสามารถบอกได้มันพร้อมใช้งานเสมอจากพรอมต์คำสั่ง Windows NT - แน่นอนมีใน Windows NT 4 แต่ฉันไม่รู้เกี่ยวกับ Windows 3.5x พรอมต์คำสั่งได้รับการพิจารณาว่าเป็น "พลเมืองชั้นสอง" โดย Microsoft ย้อนกลับมาแล้วว่ามีการมองข้ามยูทิลิตี้บรรทัดคำสั่งที่เป็นประโยชน์มากมายในเอกสารประกอบ☹️
Ken Keenan

35

PowerShell (รวมอยู่ในมาตรฐานบน Windows 7 / 2008R2, เป็นทางเลือกสำหรับ XP / 2003 / Vista / 2008) ซึ่งรวมถึงselect-stringcmdlet สำหรับจุดประสงค์นี้


10
ในขณะที่ Select-String (นามแฝง: sls) ใช้นิพจน์ทั่วไป แต่ไม่รองรับคุณสมบัติพื้นฐานบางอย่างเช่นการเรียกใช้ไดเรกทอรีซ้ำ เพื่อที่คุณจะต้องรวมคำสั่ง PowerShell หลายคำสั่ง เช่น "dir -R -Include * .txt | sls" ^ สตริง Regex ของฉัน $ "
yzorg

33

Grep สำหรับ Windows โดย GnuWin Project (2014-10-02: ล้าสมัย, ดูความคิดเห็นด้านล่าง)


1
นี่คือ GnuWin32 grep ยังไม่ได้รับการอัพเดตเป็น grep เวอร์ชันล่าสุด เพื่อที่คุณจะต้องได้รับรุ่น Cygwin ดูความคิดเห็นด้านล่าง
JPaget


11

greg Cygwinและอื่น ๆ ;)


2
คุณไม่ต้องติดตั้งแพคเกจ Cygwin ทั้งหมดเพื่อเรียกใช้ greg Cygwin คุณต้องใช้ DLL ประมาณ 5 ตัว ได้แก่ : cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll และ cyggce_s-1.dll
JPaget

ฉันใช้ Cygwin เป็นเวลานาน ... และเมื่อเร็ว ๆ นี้พยายามที่จะแทนที่ด้วย Windows-Linux-Subsystems ... ไม่นาน ... กลับไปที่ CYGWIN ... กลับมารวยมากขึ้นและล่วงล้ำน้อยลง ... เพียงเพิ่ม <cygwin > \ bin ไปยังเส้นทาง ... และคุณสามารถใช้งานได้ทุกที่ใน Windows / Batch / Powershell ... ใน s-DOS-Box ... ใน Powershell-Box ... ฯลฯ ฯลฯ --- เครื่องมือที่ยอดเยี่ยม! !!
ZEE

11

ฉันยังพบอีกวิธีหนึ่งในการใช้ GREP เช่นฟังก์ชันการทำงานใน Windows 7 ขึ้นไปโดยไม่ต้องมีแอปพลิเคชันพิเศษใด ๆ ในการติดตั้งและบนระบบเก่าที่คุณสามารถใช้ติดตั้ง Powershell

ในPowershellผู้ใช้สามารถใช้Where-Objectมันมีชุดคุณสมบัติที่ครอบคลุมที่ให้การทำงานทั้งหมดของ GREP และอื่น ๆ อีกมากมาย

หวังว่ามันจะช่วย


10

ฉันประหลาดใจที่ไม่มีใครได้กล่าวถึงfindstr ฉันไม่ใช่ greuser poweruser แต่ findstr ทำสิ่งที่ฉันต้องการกรองไฟล์และ stdin ด้วยการสนับสนุน regex ดั้งเดิม จัดส่งกับ Windows และทุกสิ่ง (แก้ไข: มีคนพูดถึง findstr, มันก็สายไปแล้ว)


5
"ไม่มีใครได้กล่าวถึง findstr" - "ดีที่สุด" คำตอบคือหนึ่งปีเก่าและไม่ findstr เอ่ยถึง ...
chiccodoro

6

GnuWin32มีมูลค่าการกล่าวขวัญมีรุ่น Win32 ดั้งเดิมของเครื่องมือ linux มาตรฐานทั้งหมดรวมถึง grep, file, sed, groff, เยื้องและอื่น ๆ

และมีการปรับปรุงอย่างต่อเนื่องเมื่อมีการเปิดตัวเครื่องมือเหล่านี้เวอร์ชันใหม่


ดูเหมือนว่าตอนนี้จะพร้อมใช้งานบน choclatey ดังนั้น cinst GnuWin32 จึง สามารถติดตั้งได้อย่างรวดเร็ว
Stuart Axon

4

ใน Windows ฉันใช้Far Managerเพื่อค้นหาไฟล์ BSD ได้รับใบอนุญาตทำงานในคอนโซลช่วยประหยัดเวลาในการพิมพ์พารามิเตอร์ cmdline นี่คือกล่องโต้ตอบการค้นหาที่เรียกใช้โดย Alt-F7Alt-F7


4

อัปเดต: สิ่งนี้ไม่เป็นจริงเมื่อคำถามถูกถามมา แต่ตอนนี้ Microsoft อนุญาตให้หนึ่งติดตั้งระบบย่อย Windows สำหรับ Linuxและ Windows จะเรียกใช้ grep ใน PowerShell ให้เรียกใช้:

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

ฉันลองใช้ แต่มีข้อผิดพลาดนี้: 'Enable-WindowsOptionalFeature' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก, โปรแกรมที่ทำงานได้หรือไฟล์แบตช์ ขอบคุณ btw
Sandun


ขอบคุณ ฉันจะลองดู ;)
Sandun

3

UnxUtilsเป็นชุดของ Unix utilites ที่ทำงานบน Windows มันมี grep, sed, gawk และอื่น ๆ


3
UnxUtils ไม่ได้รับการบำรุงรักษาเป็นเวลาหลายปี ใช้ GnuWin32 หรือ Cygwin แทน
JPaget

gnu บน windows (gow) สมบูรณ์กว่า GnuWin32: github.com/bmatzelle/gow/wiki
Simon D

3

ยูทิลิตี้ค้นหาไฟล์ที่ยอดเยี่ยมและรวดเร็วมากAgent Ransackรองรับการค้นหานิพจน์ทั่วไป ส่วนใหญ่เป็นยูทิลิตี้ GUI แต่มีอินเตอร์เฟสบรรทัดคำสั่งให้ใช้ด้วย


2

ในหน้าต่าง reskit มีโปรแกรมอรรถประโยชน์ที่เรียกว่า "qgrep" คุณอาจมีไว้ในกล่องของคุณแล้ว ;-) นอกจากนี้ยังมาพร้อมกับคำสั่ง "tail" ขอบคุณพระเจ้า!


1

แม้ว่าจะไม่ใช่ grep หรือบรรทัดคำสั่งทางเทคนิคทั้ง Microsoft Visual Studio และNotepad ++มีฟีเจอร์ Find in Files ที่ดีมากพร้อมการรองรับการแสดงออกปกติ ฉันพบว่าตัวเองใช้บ่อยๆแม้ว่าฉันจะมี grep รุ่น CygWin อยู่ในบรรทัดคำสั่ง


1

ฉันจะเพิ่ม $ 0.02 ของฉันไปที่กระทู้นี้ dnGREPเป็นเครื่องมือ grep โอเพ่นซอร์สที่ยอดเยี่ยมสำหรับ windows ที่รองรับการเลิกทำการรวมการทำงานของ windows explorer ค้นหาภายใน PDF, รหัสไปรษณีย์, DOCs และอื่น ๆ ...


1

ใช่มีเพียงโปรแกรมเดียวสำหรับ Windows PC ที่มี GUI ที่เป็นของแข็งและเป็นประโยชน์อย่างยิ่งสำหรับฉัน ฉันทำงานเป็นนักพัฒนาและบนคอมพิวเตอร์ทุกเครื่องที่ฉันมีสิ่งแรกที่ติดตั้งโปรแกรม XFind มันถูกสร้างขึ้นในปี 1997 และจนถึงขณะนี้เวอร์ชั่น 1.0 และจนถึงขณะนี้ใช้งานได้และดีที่สุด บ่อยครั้งที่ฉันต้องการค้นหาสตริงใน " .cs", " .aspx", " .sct" (ไฟล์รหัสรูปแบบ FoxPro Visual) หรือเพียงแค่ " . *" และ XFind สแกนไฟล์ทั้งหมดและแสดงไฟล์และสิ่งที่ยอดเยี่ยมอีกอย่างคือ ที่คุณสามารถดูที่สตริงอยู่ในไฟล์ XFind มีเครื่องมือแก้ไขบางชนิดเช่นกัน ถ้ามันเป็นไฟล์ไบนารีมันจะแสดงให้คุณค้นพบสตริง ลองใช้และใช้มันตลอดไปหากคุณเป็นนักพัฒนาอย่างฉัน


1

เห็นได้ชัดว่าคุณได้รับคำแนะนำที่แตกต่างกันมากมาย
ตัวเลือกส่วนตัวของฉันสำหรับยูทิลิตี้พรรคอิสระฟรีคือ: Agent Ransack
ดาวน์โหลด Agent Ransack
แม้จะมีชื่อที่ค่อนข้างสับสน แต่ก็ใช้งานได้ดีและสามารถใช้ในการค้นหาไฟล์ได้หลายวิธี

โชคดี


1

busybox แบบ all-in-one ประกอบด้วย grep / egrep / sed / awk และอีกมากมาย

รับจาก:

อัปเดต: ไม่มีแล้ว - หรือเก่ากว่า


3
ทำไมฉันถึงต้องลงคะแนนเมื่อผู้ถามถามเครื่องมือของบุคคลที่สาม
แบร์นฮาร์ด


0

หากคุณไม่สนใจผลิตภัณฑ์ที่ต้องชำระเงิน PowerGREP เป็นรายการโปรดส่วนตัวของฉัน


0

เมื่อเร็ว ๆ นี้เราได้ใช้PowerGREPสำหรับการดำเนินการเป็นกลุ่มขั้นสูงสำหรับไฟล์หลายพันไฟล์ รวมถึงการค้นหา regex ในเนื้อหาของไฟล์ PDF และการแก้ไขเอกสาร PDF ในขนาดใหญ่

มันคุ้มค่าเงินถ้าคุณต้องการประหยัดเวลาจากแรงงานมานูเอล คุณสามารถลองก่อนที่จะซื้อฉันคิดว่า


0

หากคุณต้องใช้ Windows เปล่าจากนั้นนอกเหนือจากตัวเลือก Powershell ที่กล่าวถึงข้างต้นคุณสามารถใช้ VBScript ซึ่งรองรับ RegEx ได้ดี

MS มีพื้นที่การเขียนสคริปต์ที่ดีใน Technet พร้อมด้วยตัวอย่างมากมายสำหรับผู้ดูแลระบบ


0

เพียงลองใช้โปรแกรมอรรถประโยชน์ LikeGrep java อาจช่วยคุณได้ในหลายกรณี ตามที่คุณต้องการมันยังสามารถแทนที่ข้อความบางส่วนที่พบในไฟล์ รับประกันการทำงานกับไฟล์ขนาดใหญ่ (ทดสอบมากถึง 8 Gb)


0

ตามที่กล่าวไว้ข้างต้นโครงการ gnuwin32 มี grep รุ่น Windows CLI

ถ้าคุณต้องการบางสิ่งบางอย่างด้วยอินเตอร์เฟซแบบกราฟิกฉันอยากจะแนะนำ (โอเพ่นซอร์ส) เครื่องมือAstroGrep


0

เป็นเวลานานแล้วที่ฉันใช้มัน แต่ Borland (ตอนนี้ Embarcadero) รวมบรรทัดคำสั่ง grep กับคอมไพเลอร์ C / C ++ ในบางครั้งพวกเขาได้เปิดให้ดาวน์โหลดเวอร์ชั่น 5.5 ได้ฟรีหลังจากลงทะเบียน



0

ฉันแนะนำPowerGrep

ฉันต้องทำโครงการ e ค้นพบเมื่อหลายปีก่อน ฉันพบว่าfisdstrมีข้อ จำกัด บางอย่างโดยเฉพาะอย่างยิ่งผู้ที่จะล้มเหลวในที่สุด

สคริปต์ต้องค้นหาไฟล์หลายพันไฟล์โดยใช้คำค้นหา / วลีสองสามโหล

grep ของ Cygwin ทำงานได้ดีขึ้นมากมันไม่ได้ทำให้หายใจไม่ออกบ่อยนัก แต่ในที่สุดฉันก็ไปที่ PowerGrep เพราะส่วนต่อประสานกราฟิกทำให้ง่ายต่อการบอกเวลาและสถานที่ที่ผิดพลาดและมันง่ายมากที่จะแก้ไขในเงื่อนไขและผลลัพธ์ทั้งหมดที่ ฉันต้องการ. ในที่สุดPowerGrep เป็นคนที่เชื่อถือได้มากที่สุดในสามคน


0

ฉันรู้ว่ามันเป็นหัวข้อที่ค่อนข้างเก่า แต่นี่เป็นอีกสิ่งที่คุณสามารถทำได้ ฉันทำงานกับนักพัฒนา VM โดยไม่มีการเข้าถึงอินเทอร์เน็ตและมีพื้นที่ว่างในดิสก์ค่อนข้าง จำกัด ดังนั้นฉันจึงใช้จาวาที่ติดตั้งไว้

คอมไพล์โปรแกรม java ขนาดเล็กที่พิมพ์การจับคู่ regex กับคอนโซล วางขวดไว้ที่ใดที่หนึ่งในระบบของคุณสร้างแบตช์เพื่อดำเนินการและเพิ่มโฟลเดอร์ในตัวแปร 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 (พร้อมกับ jgrep.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: โมดูลสตริงที่เลือก: Microsoft.PowerShell.Utility

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

และโพสต์บล็อกที่ให้ข้อมูลพร้อมตัวอย่างขั้นสูง: "วิธีการ" grep "ใน PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

ตัวอย่างง่ายๆจากบล็อกโพสต์: cat package.json | เลือกสตริง -Pattern webpack ls ./src/components/ | เลือกสตริง - มุมมองรูปแบบ

C:> cat post.md | เลือกสตริง - รูปแบบ "^ \ 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 ... ฉันยังใช้แพ็คเกจ Cygwin PHP ใน IIS ของฉัน ...

ในฐานะที่เป็นโบนัสคุณสามารถใช้มันได้จากเปลือกทุบตี ...
(ฉันคิดว่านี่เป็นเจตนาดั้งเดิม ;-))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.