Domanda

Esiste un'utilità simile a grep disponibile dal prompt dei comandi di Windows o esiste uno strumento di terze parti per questo?

È stato utile?

Soluzione 6

Ho anche trovato un altro modo di utilizzare la funzionalità GREP come in Windows 7 e versioni successive senza alcuna applicazione aggiuntiva da installare e su sistemi più vecchi è possibile utilizzare l'installazione Powershell.

In Powershell , l'utente può utilizzare Where-Object ha un set abbastanza completo di funzionalità che fornisce tutte le funzionalità di GREP e altro ancora.

Spero che sia d'aiuto.

Altri suggerimenti

Esiste uno strumento da riga di comando chiamato FINDSTR fornito con tutti i sistemi operativi di classe Windows NT (digitare FINDSTR /? in una finestra del prompt dei comandi per ulteriori informazioni) Non supporta tutto ciò che grep ma potrebbe essere sufficiente per le tue esigenze.

PowerShell (incluso come standard in Windows 7 / 2008R2, opzionale per XP / 2003 / Vista / 2008) che include il cmdlet select-string a questo scopo.

Grep per Windows di GnuWin Project (2014-10-02: è obsoleto, vedi i commenti qui sotto)

come detto, findstr funziona bene. esempio:

C: > dir | trova Windows

11/06/2013 alle 21:55 Windows

Cygwin grep e altro;)

Sono sorpreso che nessuno abbia menzionato FINDSTR . Non sono un power user grep, ma findstr fa quello di cui ho bisogno, filtra i file e stdin, con un supporto regex primitivo. Viene fornito con Windows e tutto il resto. (Modifica: beh qualcuno ha menzionato findstr, è tardi credo)

GnuWin32 vale la pena menzionare, fornisce la versione nativa Win32 di tutti gli strumenti linux standard, inclusi grep, file, sed, groff, indent, ecc.

Ed è costantemente aggiornato quando vengono rilasciate nuove versioni di questi strumenti.

Su Windows utilizzo Far Manager per la ricerca di file. Licenza BSD, funziona in console, consente di risparmiare tempo nella digitazione dei parametri cmdline. Ecco la sua finestra di ricerca invocata da Alt-F7. Alt-F7

UnxUtils è un ottimo set di utility Unix che girano su Windows. Ha grep, sed, gawk, ecc.

Un'utilità di ricerca di file eccellente e molto veloce, Agent Ransack , supporta regolarmente ricerca di espressioni. È principalmente un'utilità GUI, ma è anche disponibile un'interfaccia da riga di comando.

Aggiornamento: questo non era vero quando la domanda era stata originariamente posta, ma ora Microsoft consente di Installa il sottosistema Windows per Linux e Windows eseguirà quindi grep. In PowerShell, eseguire:

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

Nel reskit di Windows c'è un'utilità chiamata " qgrep " ;. Potresti averlo già nella tua scatola. ;-) Viene fornito anche con la "coda" comando, grazie a dio!

Sebbene non tecnicamente grep né riga di comando, sia Microsoft Visual Studio che Notepad ++ hanno un ottimo Trova nella funzione File con pieno supporto delle espressioni regolari. Mi ritrovo ad usarli frequentemente anche se ho anche la versione CygWin di grep disponibile sulla riga di comando.

Aggiungerò i miei $ 0,02 a questa discussione. dnGREP è un ottimo strumento grep open source per Windows che supporta Annulla, integrazione di Windows Explorer, ricerca all'interno PDF, zip, DOC e un sacco di altre cose ...

Sì, esiste un solo programma per PC Windows con una solida GUI ed è un programma essenziale per me. Lavoro come sviluppatore e su ogni computer che ho avuto, per prima cosa installa il programma XFind. È stato creato nel 1997 e fino ad ora la versione è 1.0 e fino ad ora funziona ed è il migliore. Spesso ho bisogno di cercare una stringa in un " .cs " ;, " .aspx " ;, " .sct " (File di codice modulo Visual FoxPro) o semplicemente " . * & Quot; e XFind scansiona tutti i file e mi mostra i file e un'altra cosa grandiosa è che puoi guardare dove si trova la stringa nel file. XFind ha anche una sorta di editor. Se è un file binario, ti mostrerà la stringa trovata. Provalo e usalo per sempre se sei uno sviluppatore come me.

Ovviamente hai ricevuto molti consigli diversi.
La mia scelta personale per un'utilità gratuita di terze parti è: Agent Ransack
Download del saccheggio dell'agente
Nonostante il suo nome un po 'confuso, funziona bene e può essere utilizzato in vari modi per trovare i file.

Buona fortuna

Bare Grep è utile se si desidera una GUI. Gnu grep è buono per CLI

Se non ti dispiace per un prodotto a pagamento, PowerGREP è il mio preferito personale.

Di recente abbiamo utilizzato PowerGREP per alcune operazioni collettive abbastanza avanzate su migliaia di file. Inclusa la ricerca di regex nel contenuto dei file PDF e l'alterazione dei documenti PDF su larga scala.

Vale la pena spendere se si vuole risparmiare tempo dal lavoro manuale. Puoi provarlo prima di acquistare penso.

Se devi usare Windows nudo, oltre all'opzione Powershell sopra menzionata, puoi usare VBScript, che ha un supporto RegEx decente.

MS ha anche una discreta area di scripting su Technet con molti esempi per gli amministratori.

Prova l'utilità java LikeGrep. Può aiutarti in moltissimi casi. Se lo desideri, può anche sostituire del testo, presente nei file. Garantisce il suo lavoro su file di grandi dimensioni (testato fino a 8 GB)

Come accennato in precedenza, il progetto gnuwin32 ha una versione dell'interfaccia della riga di comando di grep per Windows.

Se vuoi qualcosa con un'interfaccia grafica, consiglierei lo strumento (open-source) AstroGrep .

È da un po 'che non li uso, ma Borland (ora Embarcadero) includeva un grep a linea di comando con il loro compilatore C / C ++. Per qualche tempo, hanno reso disponibile la loro versione 5.5 come download gratuito dopo la registrazione.

Esiste un'utilità grep commerciale disponibile da Oak Road Systems .

Raccomando PowerGrep

Ho dovuto fare un progetto di e-discovery diversi anni fa. Ho scoperto che fisdstr presentava alcune limitazioni, in particolare fisdstr alla fine avrebbe fallito

lo script ha dovuto cercare tra migliaia di file usando un paio di dozzine di termini / frasi di ricerca.

Il grep di Cygwin ha funzionato molto meglio , non si è soffocato spesso, ma alla fine sono andato su PowerGrep perché l'interfaccia grafica ha reso molto più facile dire quando e dove si è schiantato, ed è stato davvero facile da modificare in tutti i condizionali e l'output che volevo. Alla fine PowerGrep è stato il più affidabile dei tre.

la busybox all-in-one contiene grep / egrep / sed / awk e MOLTE altre

scaricalo da:

o alcuni più vecchi

So che è un argomento un po 'vecchio ma, ecco un'altra cosa che puoi fare. Lavoro su una VM per sviluppatori senza accesso a Internet e spazio su disco libero abbastanza limitato, quindi ho fatto uso di Java installato su di esso.

Compilare un piccolo programma Java che stampa le corrispondenze regex sulla console. Metti il ??vaso da qualche parte sul tuo sistema, crea un batch per eseguirlo e aggiungi la cartella alla tua variabile 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 (insieme a jgrep.jar):

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

e aggiungi c: \ jgrep alla fine della variabile d'ambiente PATH.

Ora chiama semplicemente jgrep " espressione " file.txt da qualsiasi luogo.

Avevo bisogno di stampare alcuni gruppi specifici dalla mia espressione, quindi ho aggiunto un modificatore e lo chiamavo come jgrep -printGroup = 1 " expression " file.txt .

Mi rendo conto che è una vecchia domanda ma mi sono imbattuto in questo post in cerca di una risposta. E ne ho trovato uno così aggiungendolo qui per la memoria di Internet collettiva

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

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

e un post di blog informativo con esempi avanzati: " Come "grep" in PowerShell " https://antjanus.com/blog/web -Sviluppo-tutorial / how-to-grep-in-PowerShell /

Un semplice esempio da quel post sul blog: cat package.json | Webpack Select-String -Pattern ls ./src/components/ | Select-String -Pattern View

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

Usa Cygwin ...

ha versioni a 32 e 64 bit
e funziona benissimo da Windows 2000 (*)
su Windows 10 o Server 2019

Uso Cygwin da molto tempo ...
e recentemente ho provato a sostituire i sottosistemi Windows-Linux ...

non per molto ...
Sono tornato rapidamente su Cygwin di nuovo ...

molto più flessibile, controllabile e ricco ...
anche meno invadente ...

aggiungi semplicemente \ bin al percorso ...
e puoi usarlo a prescindere da Windows / Batch / Powershell ...
o in una DOS-Box ... o in una Powershell-Box ...

Inoltre puoi installare tantissimi fantastici pacchetti
che funziona davvero ... come nginX o PHP ... Uso persino il pacchetto PHP Cygwin nel mio IIS ...

Come bonus puoi anche usarlo da una shell bash ...
(Penso che questo fosse l'intento originale ;-))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top