Apakah ada command prompt grep yang setara untuk Windows 7? Yaitu, saya ingin memfilter hasil perintah:
Penggunaan bash:
ls | grep root
Apa itu dari prompt perintah Windows?
Apakah ada command prompt grep yang setara untuk Windows 7? Yaitu, saya ingin memfilter hasil perintah:
Penggunaan bash:
ls | grep root
Apa itu dari prompt perintah Windows?
Jawaban:
Findstr terdengar seperti apa yang Anda inginkan. Saya menggunakannya sepanjang waktu sebagai perkiraan setara grep pada platform Windows.
Contoh lain dengan pipa:
C:\> dir /B | findstr /R /C:"[mp]"
findstr
adalah bahwa pola regex mungkin tidak mengandung alternatif.
findstr
secara default dimiliki ? Sejak Windows XP ?
Ada beberapa kemungkinan:
grep
perintah Unix . Ada beberapa pilihan. Yang disebutkan di atas adalah GNUWin32 , cygwin , dan unxutils . Yang kurang terkenal, tetapi dalam beberapa hal lebih baik, adalah alat-alat dalam toolkit utilitas SFUA , yang berjalan di Subsistem untuk Aplikasi berbasis UNIX yang hadir di sana dalam kotak dengan Windows 7 Ultimate edition dan Windows Server 2008 R2. (Untuk Windows XP, seseorang dapat mengunduh dan menginstal Layanan untuk UNIX versi 3.5 .) Toolkit ini memiliki sejumlah besar alat TUI baris perintah, dari mv
dan du
, melalui cangkang Korn dan C, ke perl
danawk
. Muncul dalam rasa x86-64 dan IA64 serta x86-32. Program-program berjalan di lingkungan POSIX asli Windows yang asli, daripada dengan emulator DLL (seperti cygwin1.dll
) meletakan sesuatu di atas Win32. Dan ya, toolkit ini memiliki grep
, serta sekitar 300 lainnya.grep
perintah Win32 asli yang telah ditulis dan diterbitkan orang. Tim Charron memiliki versi asli Win32 dari grep GNU yang dimodifikasi , misalnya. Ada juga PowerGREP , Bare Grep , grepWin , AstroGrep , dan dnGrep , meskipun ini semua adalah program GUI bukan program TUI.find
dan findstr
. Sintaksnya berbeda dengan grep
, perhatikan, seperti halnya kemampuan ekspresi reguler.Jika perintah PowerShell diizinkan, gunakan
PS C:\> Get-ChildItem | Select-String root
atau pendek
PS C:\> ls | sls root
Ketahuilah bahwa alias sls
hanya didefinisikan diawali dengan PowerShell versi 3.0. Anda dapat menambahkan alias untuk kurang mengetik:
PS C:\> New-Alias sls Select-String
Untuk menjalankan perintah PowerShell langsung dari cmd, gunakan
C:\>powershell -command "ls | select-string root"
Dalam revisi awal Anda, Anda menulis MS-DOS, hanya ada FIND
, sejauh yang saya tahu. Tapi ini adalah OS kuno yang tidak digunakan lagi.
Pada prompt perintah Windows NT (mis. Win2K dan win XP dan yang lebih baru, jadi mis. Win7, win10), Anda dapat menggunakan find
dan findstr
dan jika Anda mengunduh GnuWin32 makagrep
Perbedaan mendasar adalah bahwa findstr memiliki beberapa dukungan ekspresi reguler . Grep mendukung ekspresi reguler terbaik.
C:\>dir | find "abc"
C:\>dir | find /i "abc"
find /?
dan findstr /?
menunjukkan kepada Anda apa yang dilakukan sakelar.
Gnuwin32 memiliki "paket". Jika Anda mengunduh GnuWin32, saya sarankan paket coreutils untuk sekumpulan utilitas berguna dasar yang akan Anda kenal, tetapi grep tidak memilikinya dengan paket itu sendiri.
Ditambahkan
Grep GnuWin32, terakhir kali saya periksa, sudah tua. Grep Cygwin jauh lebih terkini. Juga ingat bahwa banyak orang menggunakan Mesin Virtual daripada port windows dari perintah * nix.
Jika Anda lebih suka menggunakan grep
, daripada findstr
, ada .exe
versi file tunggal di UnxUtils , jadi ini portabel dan tidak perlu menginstalnya, atau menggunakan sesuatu seperti Cygwin.
.zip
file .exe
file. Satu-satunya downside kecil adalah bahwa versi agak lama.
grep
untuk Windows: gnuwin32.sourceforge.net/packages/grep.htm
Anda dapat mencoba menginstal Chocolatey di Windows, dan melalui itu, instal alat Gow . Ini akan memberi Anda grep
pada Windows.
Gow
berdiri untuk GNU di Windows. Ini memberikan utilitas baris perintah Unix pada Windows.
Penggunaan bash
$ ls | grep root
Cmd digunakan
> dir /b | findstr root
di mana /b
singkatan b adalah daftar direktori dan file
/B
, /R
dan /C
OP tidak bertanya, sedangkan jawaban saya memberikan padanan yang tepat
/b
adalah untuk membuat dir
output yang sama dengan ls
output. Jika Anda mengujinya, Anda akan melihat perbedaannya. Jadi itu tidak setara persis.
Saya menulis alternatif Windows untuk grep menggunakan kode Hybrid Batch / JScript. Saya menulis ini karena mendapatkan karakter escape tepat di port grep GNU Win32 benar-benar menyebalkan. Versi ini bekerja lebih seperti bagaimana Anda ingin versi GNU berfungsi di 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);
}
}
}
Anda selalu dapat menemukan versi terbaru di halaman Gist saya untuk ini.
Program multi replacer telah disiapkan sehingga banyak fungsi dapat dilakukan dengan menggunakan parameter baris perintah. Penggunaan baris perintah terlihat di bawah:
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]
Anda masih dapat menggunakan grep
perintah Linux yang Anda kenal dan yang lainnya dengan mengunduh alat ini UnxUtils dan menambahkan lokasi itu ke PATH
variabel lingkungan Anda
2.4.2
tetapi gnuwin32 memiliki yang lebih baru 2.5.4
Saya akan menyarankan menggunakan busybox-w32 , karena hanya berukuran sekitar 500 KB dan dipelihara secara aktif.
Sehingga dalam kasus Anda, di command prompt, itu adalah:
busybox ls | busybox grep root
Anda bisa menggunakan doskey
peluncuran prompt perintah dengan file batch untuk membuat perintah, seperti:
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
Kemudian Anda dapat menggunakan ls | grep root
command prompt.
Jika Anda ingin menambahkan yang paling sederhana grep
ke lingkungan windows Anda, maka navigasikan ke c:\windows\system32
dan tambahkan skrip batch kecil dengan menggunakan perintah ini:
echo findstr %1 > grep.bat
Sekarang kamu bisa
dir | grep notepad.exe
yang benar-benar campuran yang menakutkan. Jadi tambahkan skrip batch lain ls
seperti yang dijelaskan dalam posting ini
echo dir %1 > %systemroot%\system32\ls.bat
Sekarang hal-hal terlihat agak akrab
ls | grep notepad
HTH
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
Itu akan menjadi setara cepat dan kotor.
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