क्या विंडोज 7 के लिए कमांड प्रॉम्प्ट grep बराबर है? यही है, मैं एक आदेश के परिणामों को फ़िल्टर करना चाहता हूं:
बैश उपयोग:
ls | grep root
यह विंडोज कमांड प्रॉम्प्ट से क्या होगा?
क्या विंडोज 7 के लिए कमांड प्रॉम्प्ट grep बराबर है? यही है, मैं एक आदेश के परिणामों को फ़िल्टर करना चाहता हूं:
बैश उपयोग:
ls | grep root
यह विंडोज कमांड प्रॉम्प्ट से क्या होगा?
जवाबों:
Findstr आप क्या चाहते हैं जैसा लगता है। मैं इसे हर बार विंडोज प्लेटफॉर्म पर अनुमानित grep-समकक्ष के रूप में उपयोग करता हूं।
पाइप के साथ एक और उदाहरण :
C:\> dir /B | findstr /R /C:"[mp]"
findstr
यह है कि रेगेक्स पैटर्न में विकल्प नहीं हो सकते हैं।
findstr
डिफ़ॉल्ट रूप से विंडोज के अन्य संस्करणों में क्या है ? Windows XP के बाद से ?
कई संभावनाएं हैं:
grep
कमांड के एक पोर्ट का उपयोग करें । कई विकल्प हैं। अक्सर उल्लेखित GNUWin32 , cygwin , और unxutils हैं । कम प्रसिद्ध, लेकिन कुछ मायनों में बेहतर, SFUA उपयोगिता टूलकिट में उपकरण हैं , जो UNIX- आधारित अनुप्रयोगों के लिए सबसिस्टम में चलते हैं, जो विंडोज 7 अल्टीमेट संस्करण और विंडोज सर्वर 2008 R2 के साथ बॉक्स में वहीं आता है। (Windows XP के लिए, एक कर सकते हैं डाउनलोड और स्थापित यूनिक्स संस्करण 3.5 के लिए सेवा से।) यह टूलकिट कमांड लाइन TUI उपकरणों की एक बड़ी संख्या है, mv
और du
कॉर्न और सी के गोले के माध्यम से करने के लिए, perl
औरawk
। यह x86-64 और IA64 दोनों फ्लेवर्स के साथ-साथ x86-32 दोनों में आता है। cygwin1.dll
Win32 पर चीजें लेयरिंग के साथ-साथ एमुलेटर डीएलएल (जैसे ) के बजाय विंडोज के मूल उचित पॉसिक्स वातावरण में प्रोग्राम चलते हैं । और हाँ, टूलकिट में grep
और साथ ही कुछ 300 अन्य हैं।grep
कमांड का उपयोग करें, जिन्हें लोगों ने लिखा और प्रकाशित किया है। उदाहरण के लिए टिम चरन के पास संशोधित GNU grep का एक देशी Win32 संस्करण है । वहाँ भी PowerGREP , नंगे Grep , grepWin , AstroGrep , और dnGrep , नहीं TUI कार्यक्रमों हालांकि इन सभी जीयूआई कार्यक्रम हैं।find
और findstr
। वाक्य-विन्यास अलग-अलग है grep
, नोट, जैसा कि नियमित अभिव्यक्ति क्षमता है।यदि PowerShell आदेशों की अनुमति है, तो उपयोग करें
PS C:\> Get-ChildItem | Select-String root
या छोटा
PS C:\> ls | sls root
विदित हो कि उपनाम sls
केवल पॉवरशेल संस्करण 3.0 के साथ शुरू हुआ है। आप कम टाइपिंग के लिए एक उपनाम जोड़ सकते हैं:
PS C:\> New-Alias sls Select-String
सीधे cmd से पॉवरशेल कमांड चलाने के लिए, उपयोग करें
C:\>powershell -command "ls | select-string root"
अपने शुरुआती संशोधन में आपने MS-DOS लिखा है, केवल वही है FIND
, जहाँ तक मुझे पता है। लेकिन यह एक प्राचीन ओएस है जिसका अब उपयोग नहीं किया जाता है।
Windows NT कमांड प्रॉम्प्ट में (जैसे Win2K और जीत XP और बाद, इसलिए जैसे Win7, win10), तो आप उपयोग कर सकते हैं find
और findstr
और यदि आप डाउनलोड GnuWin32 तोgrep
बुनियादी अंतर यह है कि खोज में कुछ नियमित अभिव्यक्तियों का समर्थन होता है। Grep नियमित अभिव्यक्ति का सबसे अच्छा समर्थन करता है।
C:\>dir | find "abc"
C:\>dir | find /i "abc"
find /?
और findstr /?
आपको दिखाता है कि स्विच क्या करते हैं।
Gnuwin32 में "पैकेज" हैं। यदि आप GnuWin32 को डाउनलोड करते हैं, तो मैं सुझाव देता हूं कि बुनियादी उपयोगी उपयोगिताओं के एक समूह के लिए कोरुटिल्स पैकेज से आप परिचित होंगे, लेकिन grep इसमें नहीं है कि यह अपना पैकेज है।
जोड़ा गया
GnuWin32 के grep, पिछली बार जब मैंने जाँच की, तो यह पुराना है। साइगविन का क्रेप अब तक अधिक है। यह भी ध्यान रखें कि बहुत से लोग * nix कमांड के विंडो पोर्ट के बजाय वर्चुअल मशीन का उपयोग करते हैं।
यदि आप उपयोग करते हैं grep
, बजाय findstr
, UnxUtils.exe
में एक एकल फ़ाइल संस्करण है , तो यह पोर्टेबल है और इसे स्थापित करने या Cygwin जैसी किसी चीज़ का उपयोग करने की कोई आवश्यकता नहीं है।
.zip
की एक फाइल है .exe
। केवल छोटा नकारात्मक पक्ष यह है कि संस्करण थोड़े पुराने हैं।
grep
विंडोज के लिए भी प्रदान करता है: gnuwin32.sourceforge.net/packages/grep.htm
आप Windows पर Chocolatey स्थापित करने का प्रयास कर सकते हैं , और इसके माध्यम से, Gow टूल इंस्टॉल कर सकते हैं । यह आपको grep
विंडोज पर प्रदान करेगा ।
Gow
विंडोज पर जीएनयू के लिए खड़े रहें। यह विंडोज पर यूनिक्स कमांड लाइन उपयोगिताओं प्रदान करता है।
बैश उपयोग
$ ls | grep root
सीएमडी का उपयोग
> dir /b | findstr root
जहाँ b/b
के लिए खड़ा है निर्देशिका और फ़ाइलों की सूची
/B
, /R
और /C
ओपी के बारे में नहीं पूछा, जबकि मेरा उत्तर सटीक समकक्ष देता है
/b
बनाने के लिए है dir
उत्पादन के रूप में ही ls
उत्पादन। यदि आप इसका परीक्षण करेंगे तो आपको अंतर दिखाई देगा। तो यह सटीक समकक्ष नहीं है।
मैंने हाइब्रिड बैच / JScript कोड का उपयोग करके grep के लिए एक विंडोज विकल्प लिखा। मैंने ऐसा इसलिए लिखा क्योंकि GNU Win32 grep पोर्ट में सही तरीके से भागने के पात्र मिलना एक वास्तविक दर्द था। यह संस्करण बहुत अधिक काम करता है जैसे आप विंडोज में GNU संस्करण कैसे काम करना चाहते हैं:
@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);
}
}
}
आप हमेशा इसके लिए मेरे Gist पृष्ठ पर नवीनतम संस्करण पा सकते हैं ।
मल्टी रिप्लेसर प्रोग्राम तैयार किया गया है ताकि कमांड लाइन मापदंडों का उपयोग करके कई कार्य किए जा सकें। कमांड लाइन का उपयोग नीचे देखा गया है:
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]
मैं बिजीबॉक्स-डब्ल्यू 32 का उपयोग करने का सुझाव दूंगा , क्योंकि यह केवल 500 केबी आकार का है और सक्रिय रूप से बनाए रखा गया है।
ताकि आपके मामले में, कमांड प्रॉम्प्ट में, यह है:
busybox ls | busybox grep root
आप doskey
कमांड बनाने के लिए बैच फ़ाइल द्वारा कमांड प्रॉम्प्ट लॉन्च में उपयोग कर सकते हैं , जैसे:
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
तब आप ls | grep root
कमांड प्रॉम्प्ट पर उपयोग कर सकते हैं ।
यदि आप grep
अपने विंडोज़ वातावरण में सबसे सरल जोड़ना चाहते हैं, तो c:\windows\system32
इस कमांड का उपयोग करके एक छोटी बैच स्क्रिप्ट पर नेविगेट करें और जोड़ें:
echo findstr %1 > grep.bat
अब आप कर सकते हैं
dir | grep notepad.exe
जो वास्तव में गंदगी का एक डरावना मिश्रण है। तो ls
इस पोस्ट में बताए अनुसार एक और बैच स्क्रिप्ट जोड़ें
echo dir %1 > %systemroot%\system32\ls.bat
अब चीजें थोड़ी परिचित लगती हैं
ls | grep notepad
HTH
echo findstr %1 %2 %3 %4 %5 > %systemroot%\grep.cmd
यह जल्दी और गंदा बराबर होने वाला है।
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