2009-09-12 15 views

risposta

9

Ho anche trovato un altro modo di utilizzare la funzionalità GREP like in Windows 7 e versioni successive senza alcuna applicazione aggiuntiva da installare e su sistemi meno recenti è possibile utilizzare l'installazione di PowerShell.

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

Hope It helps.

0

Se si installa Cygwin o Mingw, quindi si.

Altrimenti, non per quanto ne so.

32

Grep for Windows by GnuWin Project (2014-10-02: E 'superata, vedi commenti qui sotto)

+1

Questo è il grep GnuWin32.Non è stato aggiornato alla versione più recente di grep. Per questo dovrai ottenere la versione di Cygwin. Vedi il commento qui sotto. – JPaget

+5

-1 per la risposta solo al collegamento. – Travis

+0

Ma busybox è in fase di sviluppo ... http://stackoverflow.com/a/22634389/1498669 – Bernhard

176

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

+5

Grazie! Non è grep, ma mi piace essere in grado di funzionare senza installare software aggiuntivo sulle macchine di altre persone e questo me lo permetterà. – sage

+23

Puoi anche usarlo con il simbolo pipe, ad es. 'netstat -n | FINDSTR 3389' – harperville

+3

@sage, con un po 'di creatività, ** findstr ** funziona esattamente come grep. Fare riferimento a questo [grep per esempio Windows] (http://www.mkyong.com/linux/grep-for-windows-findstr-example/). – mkyong

31

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

+9

Mentre Select-String (alias: sls) utilizza espressioni regolari, non supporta alcune funzionalità di base come la ricorsione delle directory. Per questo è necessario combinare più comandi di PowerShell. Come "dir -R -Include * .txt | sls"^My Regex String $ " – yzorg

3

UnxUtils è un ottimo set di utilità Unix in esecuzione su Windows. Ha grep, sed, gawk, ecc.

+3

UnxUtils non è stato mantenuto per anni.Usando invece GnuWin32 o Cygwin. – JPaget

+0

gnu su windows (gow) è più completo di GnuWin32: https: //github.com/bmatzelle/gow/wiki/ –

0

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

0

Abbiamo recentemente utilizzato PowerGREP per alcune operazioni di massa abbastanza avanzate su migliaia di file. Inclusione dell'espressione regolare nel contenuto dei file PDF e modifica dei documenti PDF in grande scala.

Ne vale la pena se si vuole risparmiare tempo da manuel manodopera. Puoi provarlo prima di acquistarlo, penso.

8

Cygwin grep e più;)

+2

Non è necessario installare l'intero pacchetto Cygwin per eseguire Cygwin grep. Sono sufficienti circa 5 DLL: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1. dll, cygintl-8.dll e cyggce_s-1.dll. – JPaget

0

Se si deve usare nuda di Windows, quindi in aggiunta all'opzione PowerShell osservato in precedenza, è possibile utilizzare VBScript, che ha il sostegno RegEx decente.

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

9

Sono sorpreso che nessuno abbia menzionato FINDSTR. Non sono grep poweruser, ma findstr fa ciò di cui ho bisogno, filtra i file e lo stdin, con un supporto di regex primitivo. Navi con Windows e tutto il resto. (Edit: Beh qualcuno ha fatto menzione findstr, È tardi immagino)

+3

"nessuno ha menzionato FINDSTR" - la "migliore" risposta ha un anno in più e menziona FINDSTR ... – chiccodoro

6

GnuWin32 è degno di nota, fornisce versione nativa Win32 di tutti gli strumenti standard di Linux, tra cui grep, lima, sed, Groff, trattino, ecc

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

+0

Ora sembra essere disponibile su choclatey, quindi _cinst GnuWin32_ funziona per installarlo rapidamente –

2

Nel reskit di Windows è presente un'utilità denominata "qgrep". Potresti averlo già sulla tua scatola. ;-) Viene anche con il comando "coda", grazie a dio!

0

Sebbene non sia tecnicamente grep né riga di comando, sia Microsoft Visual Studio che Notepad++ dispongono di un'ottima funzione Trova nei file con supporto completo delle espressioni regolari. Mi trovo a usarli spesso anche se ho la versione CygWin di grep disponibile sulla riga di comando.

0

Basta provare l'utilità java di LikeGrep. Potrebbe aiutarti in moltissimi casi. Come desideri, può anche sostituire del testo, trovato nei file. Garantisce il suo lavoro su file di grandi dimensioni (testati fino a 8 Gb)

0

Come accennato in precedenza, il progetto gnuwin32 ha una versione CLP di Windows di grep.

Se si desidera qualcosa con un'interfaccia grafica, si consiglia lo strumento (open-source) AstroGrep.

0

È passato un po 'di tempo da quando li ho usati, ma Borland (ora Embarcadero) includeva una riga di comando grep con il compilatore C/C++. Per un certo periodo di tempo, hanno reso disponibile la versione 5.5 come free download dopo la registrazione.

1

Aggiungerò il mio $ 0.02 a questo thread. dnGREP è un ottimo strumento grep open source per Windows che supporta l'annullamento, l'integrazione di Windows Explorer, la ricerca all'interno di PDF, zip, DOC e molte altre cose ...

3

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

15

come accennato, findstr funziona bene. esempio:

C:> dir | findstr di Windows

11.06.2013 21:55 di Windows

3

Su Windows che uso Far Manager per la ricerca di file. La licenza BSD, funziona in console, consente di risparmiare tempo durante la digitazione dei parametri di cmdline. Ecco la sua finestra di ricerca invocata da Alt-F7.Alt-F7

0

vi consiglio PowerGrep

ho dovuto fare un progetto di e-discovery diversi anni fa. Ho scoperto che fisdstr avuto alcune limitazioni, soprattutto fisdstr sarebbe poi fallire

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

grep di Cygwin ha funzionato molto meglio, non soffocare spesso, ma alla fine sono andato a PowerGrep perché l'interfaccia grafica ha reso molto più facile da dire quando e dove si schiantò, e anche è stato davvero facile da modificare in tutti i condizionali e l'output che volevo. In definitiva PowerGrep era il più affidabile dei tre.

0

Sì, esiste un solo programma per PC Windows con una GUI solida ed è essenziale per me. Lavoro come sviluppatore e su ogni computer che ho avuto, prima cosa installare il programma XFind. È stato creato nel 1997 e fino ad ora la versione è 1.0 e fino ad ora funziona ed è la migliore. Spesso ho bisogno di cercare una stringa in ".cs", " .aspx", ".sct" (file di codice modulo Visual FoxPro) o semplicemente ". *" E XFind analizza tutti i file e mostra i file e un'altra cosa fantastica è che puoi cercare 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.

1

Hai ovviamente ricevuto molte raccomandazioni diverse.
La mia scelta personale per un libero, 3 ° Utility Party è: Agente Ransack
Agent Ransack Download
Nonostante il nome un po 'di confusione, funziona bene e può essere utilizzato in una varietà di modi per trovare i file.

Good Luck

0

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

Compilare un piccolo programma java che stampa le corrispondenze regex sulla console. Mettere il vaso da qualche parte sul vostro sistema, creare un batch per eseguirlo e aggiungere la cartella alla 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 aggiungere c: \ jgrep alla fine della variabile d'ambiente PATH.

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

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

Problemi correlati