Windows 7 için bir komut istemi grep eşdeğeri var mı ? Yani, bir komutun sonuçlarını filtrelemek istiyorum:
Bash kullanımı:
ls | grep root
Windows komut isteminden ne olurdu?
Windows 7 için bir komut istemi grep eşdeğeri var mı ? Yani, bir komutun sonuçlarını filtrelemek istiyorum:
Bash kullanımı:
ls | grep root
Windows komut isteminden ne olurdu?
Yanıtlar:
Findstr, istediğin gibi ses çıkarır. Her zaman Windows platformunda yaklaşık bir grep eşdeğeri olarak kullanıyorum.
Borular ile başka bir örnek :
C:\> dir /B | findstr /R /C:"[mp]"
findstr
, regex modelinin alternatif içermemesidir.
findstr
? Windows XP’den beri mi?
Birkaç olasılık var:
grep
komutunun portunu kullanın . Birkaç seçenek var. Genellikle bahsedilen GNUWin32 , cygwin ve unxutils . Daha az bilinen, ancak bazı yönlerden daha iyi, SFUA yardımcı program araç setinde , Windows 7 Ultimate sürümü ve Windows Server 2008 R2 ile birlikte gelen kutuda gelen UNIX Tabanlı Uygulamalar için Alt Sistemde çalışan araçlar . (Windows XP, bir yapabilirsiniz indirmek ve yüklemek Hizmetleri UNIX sürüm 3.5 için ). Bu araç komut satırı TUI araçları çok sayıda gelen mv
ve du
hiç Korn ve C kabukları yoluyla, perl
veawk
. Hem x86-64 hem de IA64 lezzetlerinde ve x86-32'de gelir. Programlar, emülatör DLL'leri (örneğin cygwin1.dll
) Win32 üzerinden birşeyler koymak yerine, Windows'a özgü uygun POSIX ortamında çalışır . Ve evet, alet takımında grep
olduğu gibi bazı 300 kişi daha var.grep
İnsanların yazdığı ve yayınladığı birçok yerel Win32 komutundan birini kullanın . Tim Charron, örneğin, değiştirilmiş bir GNU grep'in yerel bir Win32 sürümüne sahip . De vardır PowerGREP , Çıplak Grep , grepWin , AstroGrep ve dnGrep bunların hepsi GUI programları olmasına rağmen değil TUI programları.find
ve kullanın findstr
. Sözdizimi, grep
normal ifade kabiliyetindeki gibi nottan farklıdır .Eğer PowerShell komutları izin kullanmak
PS C:\> Get-ChildItem | Select-String root
veya kısa
PS C:\> ls | sls root
Diğer adın sls
yalnızca PowerShell sürüm 3.0 ile başlayarak tanımlandığını unutmayın. Daha az yazmak için bir takma ad ekleyebilirsiniz:
PS C:\> New-Alias sls Select-String
PowerShell komutunu doğrudan cmd'den çalıştırmak için,
C:\>powershell -command "ls | select-string root"
İlk revizyonunuzda MS-DOS yazdınız, FIND
bildiğim kadarıyla sadece var . Ancak artık kullanılmayan eski bir işletim sistemi.
Windows NT komut isteminde (örneğin Win2K ve XP ve daha sonra kazanmak böylece örneğin win7, win10), kullanabilirsiniz find
ve findstr
indirmek ve eğer GnuWin32 sonragrep
Temel farklar, findstr'nin bazı düzenli ifade desteğine sahip olmasıdır. Grep, düzenli ifadeleri en iyi şekilde destekler.
C:\>dir | find "abc"
C:\>dir | find /i "abc"
find /?
ve findstr /?
anahtarların ne yaptığını gösterir.
Gnuwin32'nin "paketleri" var. GnuWin32'yi indirirseniz, aşina olacağınız bir sürü temel yardımcı program için coreutils paketini öneririm, ancak grep, kendi paketi değildir.
Eklendi
GnuWin32'nin grep'i, en son kontrol ettiğimde eski. Cygwin'in grep'i bugüne kadar çok daha fazla. Ayrıca birçok kişinin * nix komutlarının pencerelerindeki portları yerine Sanal Makineler kullandığını da unutmayın.
Eğer kullanmak grep
yerine findstr
, UnxUtils'te tek bir .exe
dosya sürümü var , bu nedenle taşınabilir ve onu kurmanıza ya da Cygwin gibi bir şey kullanmanıza gerek yok.
.zip
dosya .exe
dosyası. Tek küçük dezavantajı sürümleri biraz eski olmasıdır.
grep
Windows sağlar: gnuwin32.sourceforge.net/packages/grep.htm
Chocolatey'i Windows'a yüklemeyi deneyebilir ve Gow aracını yükleyebilirsiniz . Bu size grep
Windows'ta sağlayacaktır .
Gow
Windows’ta GNU’nun kısaltması. Windows'ta Unix komut satırı yardımcı programları sağlar.
Bash kullanımı
$ ls | grep root
Cmd kullanımı
> dir /b | findstr root
nerede /b
açılımı b dizin ve dosya listesi vardır
/B
, /R
ve /C
cevabım verir iken OP, sormadın tam eşdeğeri
/b
Yapmaktır dir
çıkış ile aynı ls
çıktı. Eğer test ederseniz, farkı göreceksiniz. Yani tam olarak eşdeğer değil.
Hybrid Batch / JScript kodunu kullanarak grep için bir Windows alternatifi yazdım. Bunu yazdım çünkü GNU Win32 grep portundaki kaçış karakterlerini doğru bulmak gerçekten acı vericiydi. Bu sürüm, GNU sürümünün Windows'ta çalışmasını nasıl istediğinize benzer şekilde çalışır:
@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);
}
}
}
En son sürümü her zaman Gist sayfamda bulabilirsiniz .
Çok işlevli komut programı, birçok fonksiyonun komut satırı parametreleri kullanılarak gerçekleştirilebileceği şekilde hazırlanmıştır. Komut satırı kullanımı aşağıda görülmektedir:
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]
Tanıdık grep
ve diğer Linux komutlarınızı hala bu aracı UnxUtils'i indirerek kullanabilir ve PATH
ortam değişkeninize konum ekleyebilirsiniz
2.4.2
fakat gnuwin32'nin bir tane daha var 2.5.4
Sadece yaklaşık 500 KB boyutunda ve aktif bir şekilde bakımı yapıldığı için busybox-w32 kullanmanızı öneririm .
Böylece sizin durumunuzda, komut isteminde bu:
busybox ls | busybox grep root
doskey
Komut isteminde, örneğin bir komut yapmak için toplu iş dosyası tarafından başlatılan komutları kullanabilirsiniz :
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
Sonra ls | grep root
komut isteminde kullanabilirsiniz.
grep
Windows ortamınıza en basitini eklemek istiyorsanız, c:\windows\system32
bu komutu kullanarak küçük bir toplu komut dosyasına gidin ve ekleyin:
echo findstr %1 > grep.bat
Şimdi yapabilirsin
dir | grep notepad.exe
Bu gerçekten korkunç bir bok karışımı. Yani ls
bu yazı açıklandığı gibi başka bir toplu komut dosyası ekleyin
echo dir %1 > %systemroot%\system32\ls.bat
Şimdi işler biraz tanıdık geliyor
ls | grep notepad
HTH
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
Bu hızlı ve kirli bir eşdeğer olacak.
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