não confunda ms-dos com o prompt de comando. + o uso de find e findstr e até grep, para windows .. certamente é facilmente encontrado com uma pesquisa rápida. existem até tabelas de comandos equivalentes no linux e no windows. também você exemplo bash não é específico para bash .. apenas suponho, * nix OS.
barlop
Respostas:
280
Findstr soa como o que você deseja. Eu o uso o tempo todo como um equivalente aproximado de grep na plataforma Windows.
Sim, isso parece ser o que estou procurando. Eu entendo que provavelmente há limitações. Vou dar uma chance.
chrisjlee
18
por que eles não podiam simplesmente chamar isso de grep!
Victor Grazi 8/09
6
@VictorGrazi Eles realmente fizeram isso no início, consulte este artigo . Foi originalmente chamado qgrep - mas depois foi renomeado.
Zitrax
3
O grande problema findstré que o padrão regex pode não conter alternativas.
Wolf
A questão é sobre o Windows 7, mas que outras versões do Windows possuem findstrpor padrão? Desde o Windows XP ?
Peter Mortensen
44
Existem várias possibilidades:
Use uma porta de um grepcomando Unix . Existem várias opções. Muitas vezes mencionados são GNUWin32 , cygwin e unxutils . Menos conhecidas, mas de certa forma melhores, são as ferramentas no kit de ferramentas do utilitário SFUA , que são executadas no Subsistema para Aplicativos Baseados em UNIX, que vem logo ali na caixa com o Windows 7 Ultimate edition e o Windows Server 2008 R2. (No Windows XP, é possível baixar e instalar o Services for UNIX versão 3.5 .) Este kit de ferramentas possui um grande número de ferramentas TUI de linha de comando, de mve du, através dos shells Korn e C, para perleawk. Ele vem nos sabores x86-64 e IA64, bem como no x86-32. Os programas são executados no ambiente POSIX adequado nativo do Windows, em vez de com DLLs de emulador (como cygwin1.dll) sobrepor coisas no Win32. E sim, o kit de ferramentas possui grep, além de outras 300.
O cygwin funcionou muito bem para mim no Win 7. Eu precisava do grep e o GnuWin32 grep não funcionou para mim.
Kozuch 21/02
Você escreve que não vejo perl no SUA C: \ Windows \ SUA> dir perl * / s / b Arquivo não encontrado e em execução, por exemplo, c shell do SUA Não o vejo em / bin
barlop
você também escreve que o SFUA é, de certa forma, melhor. De que maneiras?
barlop
@Kozuch a menos que você indicar como não funcionou, então seu comentário não é útil
barlop
19
Se os comandos do PowerShell forem permitidos, use
PS C:\> Get-ChildItem | Select-String root
ou curto
PS C:\> ls | sls root
Esteja ciente de que o alias slsé definido apenas a partir do PowerShell versão 3.0. Você pode adicionar um alias para digitar menos:
PS C:\> New-Alias sls Select-String
Para executar o comando do PowerShell diretamente do cmd, use
Na sua revisão inicial, você escreveu o MS-DOS, apenas FIND, até onde eu sei. Mas é um sistema operacional antigo que não é mais usado.
No prompt de comando do Windows NT (por exemplo, Win2K e ganhar XP e mais tarde, por isso, por exemplo, win7, win10), você pode usar finde findstre se você baixar GnuWin32 seguidagrep
As diferenças básicas são que o findstr tem suporte para expressões regulares . O Grep suporta melhor expressões regulares.
C:\>dir | find "abc"
C:\>dir | find /i "abc"
find /?e findstr /?mostra o que os switches fazem.
O Gnuwin32 possui "pacotes". Se você baixar o GnuWin32, sugiro o pacote coreutils para vários utilitários básicos que você já conhece, mas o grep não está nesse, é em seu próprio pacote.
Adicionado
O grep do GnuWin32, da última vez que verifiquei, é antigo. O grep de Cygwin está muito mais atualizado. Lembre-se também de que muitas pessoas usam máquinas virtuais em vez de portas do Windows com comandos * nix.
Se você preferir usar grep, em vez de findstr, existe uma .exeversão de arquivo único no UnxUtils , por isso é portátil e não há necessidade de instalá-lo ou usar algo como Cygwin.
@userunknown, como exemplo, o comando unxutils sed é mais antigo e não suporta \ d, por exemplo, \ d22 para especificar cotação. Um wget mais antigo pode não fazer o download de uma página que uma mais recente fará, e se você solicitar suporte, ele poderá solicitar a mais recente, pois isso pode resolver alguns problemas. A grep muito velho, sem dúvida, não terá o nível de apoio regex que um atual tem
barlop
3
Você pode tentar instalar o Chocolatey no Windows e, com isso, instalar a ferramenta Gow . Isso fornecerá a você grepno Windows.
Gowsignifica GNU no Windows. Ele fornece utilitários de linha de comando Unix no Windows.
É um gerenciador de pacotes, como um apt-get, mas para Windows. Ele recebeu esse nome porque o desenvolvedor o baseou no NuGet, que é um gerenciador de pacotes do visual studio, e isso soa como pepita (como na pepita de galinha), então ele pensou que seria "engraçado" ou "inteligente" e ligou para seu programa Chocolatey NuGet. Eu ouvi isso em um podcast que o entrevistou. Gow pode ser baixado de forma independente demais
barlop
1
Eu sou novo no Gow, depois de alguns dias de uso, posso testemunhar que gosto muito - é melhor do que todas as portas mais antigas dos utilitários UNIX que eu havia usado antes.
Radim Cernej
@RadimCernej, seu comentário não é útil, a menos que você indique como acha que é melhor.
barlop
@barlop: Desde que escrevi meu comentário de janeiro de 2016, gradualmente e completamente, mudei para o Gow. Até agora, não há bugs, ele tem todos os utilitários que eu preciso / uso, o caminho é produzido no formato Microsoft (facilitando copiar / colar em outros programas). O Gow não é invasivo o suficiente (fácil de instalar e remover), e eu recomendo fortemente que você o teste.
Radim Cernej
2
Uso do Bash
$ ls | grep root
Cmd use
> dir /b | findstr root
onde /bsignifica b é uma lista de diretórios e arquivos
Isso duplica outra resposta e não adiciona novo conteúdo. Não poste uma resposta, a menos que você realmente tenha algo novo para contribuir.
DavidPostill
@DavidPostill: Este é solução rápida para "TL; DR" usuários (como eu)
vladkras
Isso não é desculpa para adicionar uma resposta que não contribua com algo novo. De qualquer forma, a resposta aceita sempre aparecerá primeiro e será lida antes da sua.
DavidPostill
@DavidPostill, não se importa, mas a resposta aceito conter várias excessivas e inexplicáveis chaves /B, /Re /COP não perguntar sobre, enquanto a minha resposta dá exato equivalente
vladkras
O /bobjetivo é tornar a dirsaída igual à lssaída. Se você testá-lo, verá a diferença. Portanto, não é o equivalente exato.
DavidPostill
2
Eu escrevi uma alternativa do Windows para grep usando código Hybrid Batch / JScript. Eu escrevi isso porque acertar os caracteres de escape na porta grep do GNU Win32 foi uma grande dor. Esta versão funciona muito mais como você deseja que a versão GNU funcione no Windows:
O programa de substituição múltipla foi preparado para que muitas funções possam ser executadas usando parâmetros de linha de comando. O uso da linha de comando é visto abaixo:
Você ainda pode usar seus grepcomandos familiares e outros comandos do Linux baixando esta ferramenta UnxUtils e adicioná-la local à sua PATHvariável de ambiente
Se você deseja adicionar o mais simples grepao seu ambiente Windows, navegue c:\windows\system32e adicione um pequeno script em lote usando este comando:
echo findstr %1 > grep.bat
Agora você pode
dir | grep notepad.exe
o que é realmente uma mistura assustadora de merda. Portanto, adicione outro script em lote, lsconforme explicado nesta postagem
Respostas:
Findstr soa como o que você deseja. Eu o uso o tempo todo como um equivalente aproximado de grep na plataforma Windows.
Outro exemplo com tubos:
fonte
findstr
é que o padrão regex pode não conter alternativas.findstr
por padrão? Desde o Windows XP ?Existem várias possibilidades:
grep
comando Unix . Existem várias opções. Muitas vezes mencionados são GNUWin32 , cygwin e unxutils . Menos conhecidas, mas de certa forma melhores, são as ferramentas no kit de ferramentas do utilitário SFUA , que são executadas no Subsistema para Aplicativos Baseados em UNIX, que vem logo ali na caixa com o Windows 7 Ultimate edition e o Windows Server 2008 R2. (No Windows XP, é possível baixar e instalar o Services for UNIX versão 3.5 .) Este kit de ferramentas possui um grande número de ferramentas TUI de linha de comando, demv
edu
, através dos shells Korn e C, paraperl
eawk
. Ele vem nos sabores x86-64 e IA64, bem como no x86-32. Os programas são executados no ambiente POSIX adequado nativo do Windows, em vez de com DLLs de emulador (comocygwin1.dll
) sobrepor coisas no Win32. E sim, o kit de ferramentas possuigrep
, além de outras 300.grep
comandos nativos do Win32 que as pessoas escreveram e publicaram. Tim Charron tem uma versão nativa do Win32 de um GNU grep modificado , por exemplo. Também existem PowerGREP , Bare Grep , grepWin , AstroGrep e dnGrep , embora esses sejam todos programas GUI, não programas TUI.find
efindstr
. A sintaxe é diferente da degrep
, observe, assim como o recurso de expressão regular.fonte
Se os comandos do PowerShell forem permitidos, use
ou curto
Esteja ciente de que o alias
sls
é definido apenas a partir do PowerShell versão 3.0. Você pode adicionar um alias para digitar menos:Para executar o comando do PowerShell diretamente do cmd, use
fonte
Na sua revisão inicial, você escreveu o MS-DOS, apenas
FIND
, até onde eu sei. Mas é um sistema operacional antigo que não é mais usado.No prompt de comando do Windows NT (por exemplo, Win2K e ganhar XP e mais tarde, por isso, por exemplo, win7, win10), você pode usar
find
efindstr
e se você baixar GnuWin32 seguidagrep
As diferenças básicas são que o findstr tem suporte para expressões regulares . O Grep suporta melhor expressões regulares.
find /?
efindstr /?
mostra o que os switches fazem.O Gnuwin32 possui "pacotes". Se você baixar o GnuWin32, sugiro o pacote coreutils para vários utilitários básicos que você já conhece, mas o grep não está nesse, é em seu próprio pacote.
Adicionado
O grep do GnuWin32, da última vez que verifiquei, é antigo. O grep de Cygwin está muito mais atualizado. Lembre-se também de que muitas pessoas usam máquinas virtuais em vez de portas do Windows com comandos * nix.
fonte
Se você preferir usar
grep
, em vez defindstr
, existe uma.exe
versão de arquivo único no UnxUtils , por isso é portátil e não há necessidade de instalá-lo ou usar algo como Cygwin.fonte
.zip
arquivo de.exe
arquivos. A única pequena desvantagem é que as versões são um pouco antigas.grep
para o Windows: gnuwin32.sourceforge.net/packages/grep.htmVocê pode tentar instalar o Chocolatey no Windows e, com isso, instalar a ferramenta Gow . Isso fornecerá a você
grep
no Windows.Gow
significa GNU no Windows. Ele fornece utilitários de linha de comando Unix no Windows.fonte
Uso do Bash
Cmd use
onde
/b
significa b é uma lista de diretórios e arquivosfonte
/B
,/R
e/C
OP não perguntar sobre, enquanto a minha resposta dá exato equivalente/b
objetivo é tornar adir
saída igual àls
saída. Se você testá-lo, verá a diferença. Portanto, não é o equivalente exato.Eu escrevi uma alternativa do Windows para grep usando código Hybrid Batch / JScript. Eu escrevi isso porque acertar os caracteres de escape na porta grep do GNU Win32 foi uma grande dor. Esta versão funciona muito mais como você deseja que a versão GNU funcione no Windows:
Você sempre pode encontrar a versão mais recente na minha página Gist para isso.
fonte
http://www.multireplacer.com
O programa de substituição múltipla foi preparado para que muitas funções possam ser executadas usando parâmetros de linha de comando. O uso da linha de comando é visto abaixo:
fonte
Você ainda pode usar seus
grep
comandos familiares e outros comandos do Linux baixando esta ferramenta UnxUtils e adicioná-la local à suaPATH
variável de ambientefonte
2.4.2
mas GnuWin32 tem um posterior2.5.4
Eu sugeriria o uso do busybox-w32 , pois ele tem apenas 500 KB e é mantido ativamente.
Portanto, no seu caso, no prompt de comando, é:
Você pode usar
doskey
em um prompt de comando iniciado por um arquivo em lotes para criar um comando, como:Então você pode usar
ls | grep root
no prompt de comando.fonte
Se você deseja adicionar o mais simples
grep
ao seu ambiente Windows, naveguec:\windows\system32
e adicione um pequeno script em lote usando este comando:Agora você pode
o que é realmente uma mistura assustadora de merda. Portanto, adicione outro script em lote,
ls
conforme explicado nesta postagemAgora as coisas parecem um pouco familiares
HTH
fonte
Isso será equivalente rápido e sujo.
fonte