Findstr parece com o que você deseja. Eu uso o tempo todo como um equivalente grep aproximado na plataforma Windows.
Outro exemplo com canais:
C:\> dir /B | findstr /R /C:"[mp]"
Findstr parece com o que você deseja. Eu uso o tempo todo como um equivalente grep aproximado na plataforma Windows.
Outro exemplo com canais:
C:\> dir /B | findstr /R /C:"[mp]"
Existem várias possibilidades:
grep
do Unix. Existem várias opções. Muitas vezes são GNUWin32 , cygwin e unxutils . Menos conhecidas, mas, de certa forma, melhores, são as ferramentas do mv
e du
, através dos shells Korn e C, até perl
e awk
. Ele vem em ambos os sabores x86-64 e IA64, bem como x86-32. Os programas são executados no ambiente POSIX nativo do Windows, em vez de com as DLLs do emulador (como cygwin1.dll
) em camadas sobre o Win32. E sim, o kit de ferramentas tem grep
, além de outros 300. grep
que as pessoas escreveram e publicaram. Tim Charron tem uma versão nativa do Win32 de um grep GNU modificado , por exemplo. Há também PowerGREP , Bare Grep , grepWin , AstroGrep e dnGrep , embora estes sejam todos programas GUI e não programas TUI. find
e findstr
fornecidos. A sintaxe é diferente da grep
, note, assim como a capacidade de expressão regular. Se os comandos PowerShell forem permitidos, use
PS C:\> Get-ChildItem | Select-String root
ou curto
PS C:\> ls | sls root
Lembre-se de que o alias sls
é definido apenas começando com a versão 3.0 do PowerShell. Você pode adicionar um alias para menos digitação:
PS C:\> New-Alias sls Select-String
Para executar o comando do PowerShell diretamente do cmd, use
C:\>powershell -command "ls | select-string root"
Na sua revisão inicial você escreveu MS-DOS, há apenas FIND
, até onde eu sei. Mas é um antigo sistema operacional não usado mais.
No prompt de comando do Windows NT (por exemplo, Win2K e win XP e posterior, por exemplo, win7, win10), você pode usar find
e findstr
e se você baixar GnuWin32 então grep
As diferenças básicas são que a findstr tem algum suporte para expressões regulares . O Grep suporta expressões regulares melhor.
C:\>dir | find "abc"
C:\>dir | find /i "abc"
find /?
e findstr /?
mostram o que os switches fazem.
O Gnuwin32 tem "pacotes". Se você baixar o GnuWin32, eu sugiro o pacote coreutils para um monte de utilitários básicos que você já conhece, mas o grep não é aquele que é o seu próprio pacote.
Adicionado
O grep do GnuWin32, da última vez que verifiquei, é antigo. O grep do Cygwin está muito mais atualizado. Também tenha em mente que muitas pessoas usam Máquinas Virtuais em vez de portas Windows de comandos * nix.
Se preferir usar grep
, em vez de findstr
, existe uma única versão do arquivo .exe
em UnxUtils , por isso é portátil e não há necessidade de instalá-lo ou usar algo como o Cygwin.
Você pode tentar instalar o Chocolatey no Windows e, com isso, instalar o Gow . Isso fornecerá grep
no Windows.
Gow
representa o GNU no Windows. Ele fornece utilitários de linha de comando Unix no Windows.
Uso de Bash
$ ls | grep root
Cmd use
> dir /b | findstr root
onde /b
significa b são lista de diretórios e arquivos
Eu escrevi uma alternativa do Windows para o grep usando o código Hybrid Batch / JScript. Eu escrevi isso porque pegar os caracteres de escape diretamente na porta do GNU Win32 grep era uma verdadeira dor. Esta versão funciona muito mais como você gostaria que a versão GNU funcionasse no Windows:
@set @junk=1 /*
@cscript //nologo //E:jscript %~f0 %*
@goto :eof */
var args=WScript.Arguments, argCnt=args.Length, stdin=WScript.StdIn, stdout=WScript.StdOut;
var replaceSingleQuotes=false, printMatchesOnly=false, matchString, flagString, regex, argDx=0;
if(argCnt==0) {
throw new Error("You must provide search criteria.");
}
flagString=""
if(argCnt>1) {
for(var bLoop=true; bLoop&&argDx<argCnt-1; argDx++) {
switch(args(argDx)) {
case '-t': replaceSingleQuotes=true; break;
case '-o': printMatchesOnly=true; break;
case '-g': flagString+="g"; break;
case '-i': flagString+="i"; break;
case '-m': flagString+="m"; break;
default: bLoop=false; break;
}
}
}
if(replaceSingleQuotes) {
matchString=args(argCnt-1).replace("'", '"');
} else {
matchString=args(argCnt-1);
}
if(printMatchesOnly) {
while(!stdin.AtEndOfStream) {
var sLine=stdin.ReadLine();
if(flagString.Length) regex=new RegExp(matchString, flagString);
else regex=new RegExp(matchString);
var m,matches=[],startDx=0;
while((m=regex.exec(sLine.substr(startDx))) !== null) {
stdout.WriteLine(m[0]);
startDx+=m.lastIndex;
}
}
} else {
if(flagString.Length) regex=new RegExp(matchString, flagString);
else regex=new RegExp(matchString);
while(!stdin.AtEndOfStream) {
var sLine=stdin.ReadLine();
if(regex.test(sLine)) {
stdout.WriteLine(sLine);
}
}
}
Você sempre pode encontrar a versão mais recente na minha página Gist para isso.
O programa multi-substituidor 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:
MultiReplacer [Multi Replacer File] | [Search files] | [Search folders]
[-Subs] [-NoSubs] [-IncPtr=pattern] [-ExcPtr=patterns] [-DestDir=destination]
[-DMAnyTime]
[-DMWithinanhour] [-DMToday] [-DMYesterday] [-DMThisweek] [-DMThismonth]
[-DMThisYear]
[-CDMAfter=date] [-CDMBefore=date] [-MinFileSize=bytes count]
[-MaxFileSize=bytes count]
[-Search=text] [-Case] [-NoCase] [-Regex] [-NoRegex] [-SubMatchText=text]
[-ReplaceText=text]
[-StartSearch] [-StartReplace] [-AutoClose] [-StopAfterMatchThisFile] [-StopAfterMatchAll]
[-ExtractedWordsFile=filename] [-ExtractedLinesFile=filename] [-
ReportFile=filename]
Você ainda pode usar o seu familiar grep
e outros comandos do Linux baixando esta ferramenta UnxUtils e adicionando-o ao seu PATH
variável de ambiente
Eu sugeriria usar o busybox-w32 , pois ele tem apenas 500 KB de tamanho e é mantido ativamente.
Para que, no seu caso, no prompt de comando, seja:
busybox ls | busybox grep root
Você pode usar doskey
em um prompt de comando iniciado por um arquivo em lote para criar um comando, como:
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
Então você pode usar ls | grep root
no prompt de comando.
Se você quiser adicionar o grep
mais simples ao seu ambiente Windows, navegue até c:\windows\system32
e adicione um pequeno script em lote usando este comando:
echo findstr %1 > grep.bat
Agora você pode
dir | grep notepad.exe
que é realmente uma mistura assustadora de merda. Então, adicione outro script em lote para ls
, conforme explicado nesta postagem
echo dir %1 > %systemroot%\system32\ls.bat
Agora as coisas parecem um pouco familiares
ls | grep notepad
HTH
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
Isso será equivalente rápido e sujo.
C:\Windows\system32>dir | grep xwiz
C:\Windows\system32>findstr xwiz
2009.06.10 23:03 4.041 xwizard.dtd
2009.07.14 03:39 42.496 xwizard.exe
2009.07.14 03:41 432.640 xwizards.dll