विंडोज 7 के लिए ग्रीप बराबर?


241

क्या विंडोज 7 के लिए कमांड प्रॉम्प्ट grep बराबर है? यही है, मैं एक आदेश के परिणामों को फ़िल्टर करना चाहता हूं:

बैश उपयोग:

ls | grep root

यह विंडोज कमांड प्रॉम्प्ट से क्या होगा?


9
कमांड प्रॉम्प्ट के साथ ms-dos को भ्रमित न करें। खिड़कियों के लिए खोज और खोज और यहां तक ​​कि grep का उपयोग .. निश्चित रूप से एक त्वरित खोज के साथ आसानी से मिल जाता है। यहाँ तक कि linux और windows में समतुल्य कमांड्स के टेबल भी हैं। आप भी bash उदाहरण bash के लिए विशिष्ट नहीं हैं .. बस मुझे लगता है, * nix OS।
बारलोप

जवाबों:


280

Findstr आप क्या चाहते हैं जैसा लगता है। मैं इसे हर बार विंडोज प्लेटफॉर्म पर अनुमानित grep-समकक्ष के रूप में उपयोग करता हूं।

पाइप के साथ एक और उदाहरण :

C:\> dir /B | findstr /R /C:"[mp]"

हाँ, लगता है कि मैं क्या देख रहा हूँ। मैं समझता हूं कि शायद सीमाएं हैं। मै उसे करने की एक कोशिश तो करूंगा।
क्रिसलीले

18
वे बस इसे grep क्यों नहीं कह सकते थे!
विक्टर ग्राज़ी

6
@VictorGrazi वे वास्तव में पहले किया था, इस लेख को देखें । इसे मूल रूप से क्यूग्रेप नाम दिया गया था - लेकिन बाद में इसका नाम बदल दिया गया।
Zitrax

3
इसके साथ बड़ी समस्या findstrयह है कि रेगेक्स पैटर्न में विकल्प नहीं हो सकते हैं।
वुल्फ

प्रश्न विंडोज 7 के बारे में है, लेकिन findstrडिफ़ॉल्ट रूप से विंडोज के अन्य संस्करणों में क्या है ? Windows XP के बाद से ?
पीटर मोर्टेंसन

44

कई संभावनाएं हैं:

  • एक यूनिक्स grepकमांड के एक पोर्ट का उपयोग करें । कई विकल्प हैं। अक्सर उल्लेखित GNUWin32 , cygwin , और unxutils हैं । कम प्रसिद्ध, लेकिन कुछ मायनों में बेहतर, SFUA उपयोगिता टूलकिट में उपकरण हैं , जो UNIX- आधारित अनुप्रयोगों के लिए सबसिस्टम में चलते हैं, जो विंडोज 7 अल्टीमेट संस्करण और विंडोज सर्वर 2008 R2 के साथ बॉक्स में वहीं आता है। (Windows XP के लिए, एक कर सकते हैं डाउनलोड और स्थापित यूनिक्स संस्करण 3.5 के लिए सेवा से।) यह टूलकिट कमांड लाइन TUI उपकरणों की एक बड़ी संख्या है, mvऔर duकॉर्न और सी के गोले के माध्यम से करने के लिए, perlऔरawk। यह x86-64 और IA64 दोनों फ्लेवर्स के साथ-साथ x86-32 दोनों में आता है। cygwin1.dllWin32 पर चीजें लेयरिंग के साथ-साथ एमुलेटर डीएलएल (जैसे ) के बजाय विंडोज के मूल उचित पॉसिक्स वातावरण में प्रोग्राम चलते हैं । और हाँ, टूलकिट में grepऔर साथ ही कुछ 300 अन्य हैं।
  • Win32 के कई grepकमांड का उपयोग करें, जिन्हें लोगों ने लिखा और प्रकाशित किया है। उदाहरण के लिए टिम चरन के पास संशोधित GNU grep का एक देशी Win32 संस्करण है । वहाँ भी PowerGREP , नंगे Grep , grepWin , AstroGrep , और dnGrep , नहीं TUI कार्यक्रमों हालांकि इन सभी जीयूआई कार्यक्रम हैं।
  • आपूर्ति का उपयोग करें findऔर findstr वाक्य-विन्यास अलग-अलग है grep, नोट, जैसा कि नियमित अभिव्यक्ति क्षमता है।

साइबरविन ने मेरे लिए विन 7 पर अच्छा काम किया। मुझे grep की जरूरत थी और GnuWin32 grep ने मेरे लिए काम नहीं किया।
कोजुक

आप लिखते हैं कि मुझे SUA C: \ Windows \ SUA> dir perl * / s / b फाइल नहीं मिली है और पाया नहीं जा रहा है, जैसे कि SUA का कोई शेल नहीं चल रहा है, मैं इसे बिन में नहीं देखता
barlop

आप यह भी लिखते हैं कि SFUA कुछ मायनों में बेहतर है। किन मायनों में?
बार्लॉप

@Kozuch जब तक आप यह नहीं बताते कि यह कैसे काम नहीं करता है, तब आपकी टिप्पणी उपयोगी नहीं है
बार्लॉप

19

यदि 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"

2
ग्रीप, पॉवर्सशेल रास्ता। कम्युनरी.नेट ./2014/11/10/grep-the-powershell-way
चार्ल्स बर्ग

17

अपने शुरुआती संशोधन में आपने 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 कमांड के विंडो पोर्ट के बजाय वर्चुअल मशीन का उपयोग करते हैं।


9

यदि आप उपयोग करते हैं grep, बजाय findstr, UnxUtils.exe में एक एकल फ़ाइल संस्करण है , तो यह पोर्टेबल है और इसे स्थापित करने या Cygwin जैसी किसी चीज़ का उपयोग करने की कोई आवश्यकता नहीं है।


यह दिलचस्प है लेकिन उस उपकरण को स्थापित करने की आवश्यकता होगी।
क्रिसलीले

3
@ क्रिस: कोई स्थापना नहीं है। यह सिर्फ फाइलों .zipकी एक फाइल है .exe। केवल छोटा नकारात्मक पक्ष यह है कि संस्करण थोड़े पुराने हैं।
विरोधाभास

6
बूढ़े होने का नकारात्मक पक्ष क्या है? क्या सॉफ्टवेयर पुराना हो सकता है? सभी ताजा बाइट्स।
उपयोगकर्ता अज्ञात

3
GnuWin32 grepविंडोज के लिए भी प्रदान करता है: gnuwin32.sourceforge.net/packages/grep.htm
लियूयान 研 '

3
@userunknown अच्छी तरह से, उदाहरण के लिए, unxutils sed कमांड पुरानी है और उद्धरण निर्दिष्ट करने के लिए \ d eg \ d22 का समर्थन नहीं करती है। एक पुराने wget एक पेज को डाउनलोड नहीं कर सकता है जो एक नया होगा, और यदि आप समर्थन मांगते हैं तो वे पूछ सकते हैं कि आपको नवीनतम मिलता है जो कुछ मुद्दों को हल कर सकता है। वास्तव में एक पुराने grep कोई संदेह नहीं है regex समर्थन का स्तर है कि एक वर्तमान एक है
barlop

3

आप Windows पर Chocolatey स्थापित करने का प्रयास कर सकते हैं , और इसके माध्यम से, Gow टूल इंस्टॉल कर सकते हैं । यह आपको grepविंडोज पर प्रदान करेगा ।

Gowविंडोज पर जीएनयू के लिए खड़े रहें। यह विंडोज पर यूनिक्स कमांड लाइन उपयोगिताओं प्रदान करता है।


1
यह एक पैकेज मैनेजर है, जैसे apt-get लेकिन windows के लिए। इसे अपना नाम मिला 'क्योंकि इसे डेवलपर ने न्यूगेट से हटा दिया है, जो विजुअल स्टूडियो के लिए एक पैकेज मैनेजर है, और यह नगेट (जैसा कि चिकन नगेट) लगता है, इसलिए उसने सोचा कि वह "मजाकिया" या "चतुर" होगा और कॉल करेगा " उनके कार्यक्रम चॉकलेट नुगेट। मैंने सुना है कि एक पॉडकास्ट पर जिसने उसका साक्षात्कार किया। गो को स्वतंत्र रूप से भी डाउनलोड किया जा सकता है
बारलोप

1
मैं गौ के लिए नया हूं, कुछ दिनों के उपयोग के बाद मैं गवाही दे सकता हूं कि मैं इसे बहुत पसंद करता हूं - यह यूनिक्स के सभी पुराने बंदरगाहों से बेहतर है जो मैंने पहले इस्तेमाल किए थे।
रेडिम सेर्नज

@RadimCernej आपकी टिप्पणी तब तक उपयोगी नहीं है जब तक आप यह नहीं बताते कि आप इसे बेहतर कैसे मानते हैं।
बार्लोप १५:०५ पर

@barlop: जब से मैंने अपनी Jan-2016 की टिप्पणी लिखी है, मैंने धीरे-धीरे और पूरी तरह से Gow में बदल दिया है। अभी तक कोई बग नहीं है, इसमें सभी उपयोगिताओं हैं जिनकी मुझे आवश्यकता है / उपयोग करें, पथ Microsoft प्रारूप में आउटपुट हैं (अन्य कार्यक्रमों के लिए इसे कॉपी / पेस्ट करना आसान है)। गो गैर-आक्रामक पर्याप्त (स्थापित करने और हटाने में आसान) है जो मैं दृढ़ता से अनुशंसा करता हूं कि आप इसे टेस्ट-ड्राइव करें।
रेडिम सर्नज जूल

2

बैश उपयोग

$ ls | grep root

सीएमडी का उपयोग

> dir /b | findstr root

जहाँ b/b के लिए खड़ा है निर्देशिका और फ़ाइलों की सूची


2
यह एक और उत्तर को दोहराता है और कोई नई सामग्री नहीं जोड़ता है। कृपया जवाब न दें जब तक कि आपके पास योगदान देने के लिए वास्तव में कुछ नया न हो।
डेविडपोस्टिल

@ डेविडप्रोस्टिल: यह "टीएल; डीआर" उपयोगकर्ताओं (मेरे जैसे) के लिए तेजी से समाधान है
vladkras

यह एक जवाब जोड़ने के लिए कोई बहाना नहीं है जो कुछ भी नया योगदान नहीं देता है। किसी भी मामले में स्वीकृत उत्तर हमेशा पहले दिखाई देगा इसलिए इसे आपके सामने पढ़ा जाएगा।
डेविडपोस्टिल

@DavidPostill, बुरा मत मानना, लेकिन स्वीकार किए गए उत्तर में कई अत्यधिक और अस्पष्टीकृत कुंजियाँ हैं /B, /Rऔर /Cओपी के बारे में नहीं पूछा, जबकि मेरा उत्तर सटीक समकक्ष देता है
vladkras

/bबनाने के लिए है dirउत्पादन के रूप में ही lsउत्पादन। यदि आप इसका परीक्षण करेंगे तो आपको अंतर दिखाई देगा। तो यह सटीक समकक्ष नहीं है।
डेविडपोस्टिल

2

मैंने हाइब्रिड बैच / 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 पृष्ठ पर नवीनतम संस्करण पा सकते हैं ।


1

http://www.multireplacer.com

मल्टी रिप्लेसर प्रोग्राम तैयार किया गया है ताकि कमांड लाइन मापदंडों का उपयोग करके कई कार्य किए जा सकें। कमांड लाइन का उपयोग नीचे देखा गया है:

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]

0

आप grepइस उपकरण UnxUtils को डाउनलोड करके अपने परिचित और अन्य लिनक्स कमांड का उपयोग कर सकते हैं और इसे अपने PATHपर्यावरण चर में स्थान जोड़ सकते हैं


unxutils ग्रेप के रूप में देर नहीं हुई है के रूप में आप प्राप्त कर सकते हैं .. UNX ग्रेप है 2.4.2लेकिन gnuwin32 एक बाद एक है 2.5.4
barlop

0

मैं बिजीबॉक्स-डब्ल्यू 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कमांड प्रॉम्प्ट पर उपयोग कर सकते हैं ।


इसमें एक एंड्रॉइड बिल्ड भी है
barlop

0

यदि आप 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


-2
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

वैसे, इस सुस्त जवाब में प्रसिद्ध रूसी देव ब्लॉग पर 44 upvotes है habrahabr.ru/post/71568
vladkras
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.