Esiste un'utilità simile a quella grep
disponibile dal prompt dei comandi di Windows o esiste uno strumento di terze parti per esso?
Esiste un'utilità simile a quella grep
disponibile dal prompt dei comandi di Windows o esiste uno strumento di terze parti per esso?
Risposte:
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
fa, ma potrebbe essere sufficiente per le tue esigenze.
netstat -n | FINDSTR 3389
PowerShell (incluso come standard in Windows 7 / 2008R2, opzionale per XP / 2003 / Vista / 2008) che include il select-string
cmdlet a tale scopo.
Grep per Windows di GnuWin Project (02-10-2014: è obsoleto, vedere i commenti di seguito)
come detto, findstr funziona bene. esempio :
C:> dir | trova Windows
11/06/2013 alle 21:55 Windows
Cygwin grep e altro;)
Ho anche trovato un altro modo per 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ò usare Where-Object ha un set abbastanza completo di funzionalità che fornisce tutte le funzionalità di GREP e altro ancora.
Spero che sia d'aiuto.
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)
GnuWin32Vale 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.
Aggiornamento: questo non era vero quando la domanda era stata originariamente posta, ma ora Microsoft consente a uno di installare il sottosistema Windows per Linux e Windows eseguirà quindi grep. In PowerShell, esegui:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
UnxUtils è un ottimo set di programmi di utilità Unix eseguiti su Windows. Ha grep, sed, gawk, ecc.
Una utility di ricerca file eccellente e molto veloce, Agent Ransack , supporta la ricerca di espressioni regolari. È principalmente un'utilità GUI, ma è anche disponibile un'interfaccia da riga di comando.
Sebbene non sia tecnicamente grep né a riga di comando, sia Microsoft Visual Studio che Notepad ++ hanno un'ottima funzionalità Trova nei file con pieno supporto delle espressioni regolari. Mi ritrovo a 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, l'integrazione di Windows Explorer, la ricerca all'interno di 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 " .cs", " .aspx", " .sct" (file di codice modulo di Visual FoxPro) o semplicemente " . *" E XFind esegue la scansione di tutti i file e mi mostra i file e un'altra cosa fantastica è che puoi vedere 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
Agent Ransack Download
Nonostante il suo nome un po 'confuso, funziona bene e può essere utilizzato in vari modi per trovare i file.
In bocca al lupo
la busybox all-in-one contiene grep / egrep / sed / awk e MOLTE altre
ottenerlo da:
Aggiornamento: non più disponibile - o alcuni più vecchi
Se non ti dispiace un prodotto a pagamento, PowerGREP è il mio preferito.
Recentemente abbiamo utilizzato PowerGREP per alcune operazioni di massa piuttosto 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.
È 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.
C'è un'utilità grep commerciale disponibile da Oak Road Systems .
Raccomando PowerGrep
Ho dovuto fare un progetto di scoperta elettronica diversi anni fa. Ho scoperto che fisdstr
aveva alcune limitazioni, soprattutto il fisdstr alla fine avrebbe fallito
lo script doveva 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 anche molto semplice modificare in tutti i condizionali e produrre che Volevo. Alla fine PowerGrep era il più affidabile dei tre.
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 libero su disco piuttosto 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 "expression" 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: Modulo Select-String: Microsoft.PowerShell.Utility
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string
e un post sul blog informativo con esempi avanzati: "Come" grep "in PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/
Un semplice esempio da quel post sul blog: cat package.json | Select-String -Pattern webpack 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 perfettamente da Windows 2000 (*)
a 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 a Cygwin di nuovo ...
molto più flessibile, controllabile e ricco ...
anche meno invadente ...
basta aggiungere \ bin al percorso ...
e puoi usarlo a prescindere in Windows / Batch / Powershell ...
o in una DOS-Box ... o in una Powershell-Box ...
Inoltre puoi installare un sacco di fantastici pacchetti
che funzionano davvero ... come nginX o PHP ... Uso persino il pacchetto Cygwin PHP nel mio IIS ...
Come bonus puoi anche usarlo da una shell bash ...
(Penso che questo fosse l'intento originale ;-))