Existe um utilitário de correspondência de padrões como o GREP no Windows?

179

Existe um utilitário semelhante ao grepdisponível no prompt de comando do Windows ou existe uma ferramenta de terceiros?

Chintan Shah
fonte

Respostas:

238

Existe uma ferramenta de linha de comando chamada FINDSTRque vem com todos os sistemas operacionais da classe Windows NT (digite FINDSTR /?em uma janela do prompt de comando para obter mais informações) Ele não suporta tudo o que grepfaz, mas pode ser suficiente para suas necessidades.

Ken Keenan
fonte
7
Obrigado! Não é grep, mas eu gosto de poder funcionar sem instalar software adicional nas máquinas de outras pessoas, e isso me permitirá.
sálvia
42
Você também pode usá-lo com o símbolo de pipe, por exemplonetstat -n | FINDSTR 3389
harperville
3
@sage, com alguma criatividade, o findstr funciona exatamente como o grep. Consulte este exemplo grep para Windows .
mkyong
2
@mkyong - eu concordo. Eu não quis sugerir que de alguma forma é incompleta, apenas que é diferente e o uso de mais ferramentas requer mais trabalho. Dito isto, o findstr é minha ferramenta preferida agora ao usar computadores de outras pessoas, mas tenho que atualizar minha memória na sintaxe toda vez que o uso.
sálvia
1
@gonzobrains: simplesmente não está tão bem documentado. Até onde eu sei, ele sempre esteve disponível no prompt de comando do Windows NT - certamente, estava disponível no Windows NT 4, mas eu não conheço o Windows 3.5x. O prompt de comando foi considerado como uma "segunda classe cidadão" pela Microsoft na época que muitos utilitários de linha de comando útil ter sido esquecido na documentação ☹️
Ken Keenan
35

PowerShell (incluído como padrão no Windows 7 / 2008R2, opcional para XP / 2003 / Vista / 2008), que inclui o select-stringcmdlet para esse fim.

Richard
fonte
10
Enquanto Select-String (alias: sls) usa expressões regulares, ele não suporta alguns recursos básicos, como recursão de diretório. Para isso, você precisa combinar vários comandos do PowerShell. Como "dir -R -Include * .txt | sls" ^ My Regex String $ "
yzorg 9/9
33

Grep for Windows por GnuWin Project (02/10/2014: Está desatualizado, veja os comentários abaixo)

Gregor
fonte
1
Este é o grep do GnuWin32. Não foi atualizado para a versão mais recente do grep. Para isso, você terá que obter a versão Cygwin. Veja o comentário abaixo.
JPaget
27

como mencionado, o findstr funciona bem. exemplo:

C:> dir | findstr Windows

11/06/2013 21:55 Windows

Universo paralelo
fonte
11

Cygwin grep e mais;)

sdu
fonte
2
Você não precisa instalar o pacote completo do Cygwin para executar o Cygwin grep. Você só precisa de cerca de 5 DLLs: cygpcre-0.dll, cygpcreposix-0.dll, cygwin1.dll, cygintl-8.dll e cyggce_s-1.dll.
JPaget
Eu uso o Cygwin por um longo tempo ... e recentemente tento substituir os subsistemas Windows-Linux ... não por muito tempo ... VOLTAR AO CYGWIN ... muito mais rico e menos mais intrusivo ... basta adicionar <cygwin > \ bin para o caminho ... e você pode usá-lo de qualquer forma no Windows / Lote / Powershell ... no s DOS-Box ... em um Powershell-Box ... etc. etc etc .--- GREAT TOOL! !!
ZEE
11

Eu também encontrei mais uma maneira de utilizar a funcionalidade do GREP no Windows 7 e superior sem nenhum aplicativo extra para instalar e em sistemas mais antigos você pode usar o Powershell de instalação.

No Powershell , o usuário pode usar o Where-Object que possui um conjunto bastante abrangente de recursos que fornece toda a funcionalidade do GREP e mais.

Espero que ajude.

Chintan Shah
fonte
10

Estou surpreso que ninguém tenha mencionado o FINDSTR . Eu não sou um usuário grep poweruser, mas o findstr faz o que eu preciso, filtra arquivos e stdin, com algum suporte a regex primitivo. É fornecido com o Windows e tudo mais. (Edit: Bem, alguém mencionou findstr, é tarde, eu acho)

Svend
fonte
5
"ninguém mencionou FINDSTR" - o "melhor" resposta é um ano mais velho e faz menção FINDSTR ...
chiccodoro
6

GnuWin32Vale a pena mencionar o , ele fornece a versão Win32 nativa de todas as ferramentas padrão do Linux, incluindo grep, file, sed, groff, indent, etc.

E é atualizado constantemente quando novas versões dessas ferramentas são lançadas.

Diaa Sami
fonte
Agora parece estar disponível no choclatey, então o GnuWin32 funciona para instalá-lo rapidamente.
Stuart Axon
4

No Windows, uso o Far Manager para pesquisar arquivos. O BSD licenciado, funciona no console, economiza tempo ao digitar os parâmetros cmdline. Aqui está o diálogo de pesquisa invocado pelo Alt-F7.Alt-F7

anatoly techtonik
fonte
4

Atualização: isso não era verdade quando a pergunta foi feita originalmente, mas agora a Microsoft permite instalar o Windows Subsystem for Linux , e o Windows executará o grep. No PowerShell, execute:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
woodvi
fonte
Eu tentei, mas ele dá o seguinte erro: 'Enable-WindowsOptionalFeature' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote. Obrigado btw.
Sandun
Obrigado. Vou tentar isso. ;)
Sandun
3

O UnxUtils é um ótimo conjunto de utilitários Unix que são executados no Windows. Possui grep, sed, gawk, etc.

Andy White
fonte
3
O UnxUtils não é mantido há anos. Use o GnuWin32 ou Cygwin.
JPaget
gnu em janelas (Gow) é mais completa do que GnuWin32: github.com/bmatzelle/gow/wiki
Simon D
3

Um utilitário de pesquisa de arquivos excelente e muito rápido, o Agent Ransack , suporta a pesquisa de expressões regulares. É principalmente um utilitário da GUI, mas também está disponível uma interface de linha de comando.

JPaget
fonte
2

No reskit do Windows, há um utilitário chamado "qgrep". Você já pode ter na sua caixa. ;-) Ele também vem com o comando "tail", graças a Deus!

Jubal
fonte
1

Embora não seja tecnicamente grep nem linha de comando, o Microsoft Visual Studio e o Notepad ++ possuem um recurso Find in Files muito bom, com suporte completo a expressões regulares. Encontro-me usando-os com freqüência, embora também tenha a versão CygWin do grep disponível na linha de comando.

GBegen
fonte
1

Vou adicionar meus US $ 0,02 a esta discussão. O dnGREP é uma excelente ferramenta grep de código aberto para Windows que suporta desfazer, integração com o Windows Explorer, pesquisa em PDFs, zips, DOCs e muitas outras coisas ...

Stankovski
fonte
1

Sim, existe apenas um programa para Windows PC que possui uma interface gráfica sólida e é um utilitário essencial para mim. Eu trabalho como desenvolvedor e, em todos os computadores que tenho, instale o programa XFind. Foi criado em 1997 e até agora a versão é 1.0 e até agora funciona e é a melhor. Freqüentemente eu preciso pesquisar alguma string em um " .cs", " .aspx", " .sct" (arquivo de código de formulário do Visual FoxPro) ou apenas " . *" E o XFind verifica todos os arquivos, mostra-me e outra grande coisa é que você pode procurar onde a string está no arquivo O XFind também possui algum tipo de editor. Se for um arquivo binário, ele mostrará a string encontrada. Experimente e use-o para sempre, se você é um desenvolvedor como eu.

Shixx
fonte
1

Obviamente, você recebeu muitas recomendações diferentes.
Minha escolha pessoal para um utilitário gratuito e de terceiros é: Agent Ransack
Download do Agent Ransack
Apesar do nome um tanto confuso, ele funciona bem e pode ser usado de várias maneiras para encontrar arquivos.

Boa sorte

Dhugalmac
fonte
0

Se você não se importa com um produto pago, o PowerGREP é o meu favorito.

David Andres
fonte
0

Recentemente, usamos o PowerGREP para algumas operações em massa bastante avançadas em milhares de arquivos. Incluindo pesquisa regex no conteúdo de arquivos PDF e alteração de documentos PDF em larga escala.

Vale o dinheiro se você quiser economizar tempo com mão de obra manuel. Você pode experimentá-lo antes de comprar, eu acho.

Lars Udengaard
fonte
0

Se você precisar usar o Windows vazio, além da opção Powershell mencionada acima, poderá usar o VBScript, que possui suporte RegEx decente.

A MS também possui uma área de scripts decente no Technet, com muitos exemplos para administradores.

Ron Ruble
fonte
0

Basta tentar o utilitário LikeGrep java. Isso pode ajudá-lo em muitos casos. Como desejar, ele também pode substituir algum texto encontrado nos arquivos. Garante seu trabalho em arquivos grandes (até 8 Gb testados)

Igor
fonte
0

Como mencionado acima, o projeto gnuwin32 possui uma versão CLI do Windows do grep.

Se você quer algo com uma interface gráfica, eu recomendaria a ferramenta (de código aberto) AstroGrep .

bta
fonte
0

Já faz um tempo desde que eu os usei, mas o Borland (Embarcadero agora) incluiu uma linha de comando grep com seu compilador C / C ++. Por algum tempo, eles disponibilizaram sua versão 5.5 como um download gratuito após o registro.

GreenMatt
fonte
0

Eu recomendo o PowerGrep

Eu tive que fazer um projeto de descoberta eletrônica há vários anos. Eu descobri que fisdstrtinha algumas limitações, principalmente o fisdstr acabaria falhando

o script teve que pesquisar milhares de arquivos usando algumas dúzias de termos / frases de pesquisa.

O grep de Cygwin funcionou muito melhor , não engasgou com frequência, mas no final fui ao PowerGrep porque a interface gráfica tornava muito mais fácil saber quando e onde ele travava, e também era muito fácil editar todos os condicionais e resultados que Eu queria. Por fim, o PowerGrep foi o mais confiável dos três.

Haggisbreath
fonte
0

Eu sei que é um tópico um pouco antigo, mas aqui está outra coisa que você pode fazer. Eu trabalho em uma VM de desenvolvedor sem acesso à Internet e espaço em disco livre bastante limitado, então usei o java instalado nela.

Compile um pequeno programa java que imprime correspondências de regex no console. Coloque o jar em algum lugar do seu sistema, crie um lote para executá-lo e adicione a pasta à sua variável 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 (junto com jgrep.jar):

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

e adicione c: \ jgrep no final da variável de ambiente PATH.

Agora basta ligar jgrep "expression" file.txtde qualquer lugar.

Eu precisava imprimir alguns grupos específicos da minha expressão, então adicionei um modificador e chamei assim jgrep -printGroup=1 "expression" file.txt.

mihail
fonte
0

Sei que é uma pergunta antiga, mas me deparei com este post procurando uma resposta. E eu encontrei um para adicioná-lo aqui para a memória coletiva da Internet

Powershell: Módulo de cadeia de seleção: Microsoft.PowerShell.Utility

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

e uma postagem de blog informativa com exemplos avançados: "Como" grep "no PowerShell" https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/

Um exemplo simples dessa postagem no blog: cat package.json | Webpack Select-String -Pattern ls ./src/components/ | Visualização Select-String -Pattern

C:> cat post.md | Padrão de cadeia de caracteres de seleção "^ \ w *:"

blackweta
fonte
0

Use Cygwin ...

possui versões de 32 e 64 bits
e funciona bem do Windows 2000 (*)
ao Windows 10 ou Server 2019

Eu uso o Cygwin por um longo tempo ...
e recentemente tentei substituir o Windows-Linux-Subsystems ...

não por muito tempo ...
voltei rapidamente para Cygwin novamente ...

muito mais flexível, controlável e rico ...
também menos invasivo ...

basta adicionar \ bin ao caminho ...
e você pode usá-lo em qualquer Windows / Batch / Powershell ...
ou em uma DOS-Box ... ou em uma Powershell-Box ...

Além disso, você pode instalar uma tonelada de ótimos pacotes
que realmente funcionam ... como nginX ou PHP ... Eu até uso o pacote PHP Cygwin no meu IIS ...

Como bônus, você também pode usá-lo a partir de um shell bash ...
(Eu acho que essa era a intenção original ;-))

ZEE
fonte