it-swarm.asia

ما يعادل Grep لنظام التشغيل Windows 7؟

هل هناك أمر موجه grep مكافئ لنظام التشغيل Windows 7؟ بمعنى ، أريد تصفية نتائج الأمر:

استخدام باش:

ls | grep root

ماذا سيكون من موجه أوامر Windows؟

233
chrisjlee

Findstr يبدو وكأنه ما تريد. أستخدمه دائمًا كمكافئ تقريبي لـ grep على نظام Windows الأساسي.

مثال آخر مع الأنابيب:

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

هناك العديد من الاحتمالات:

  • استخدم منفذ أمر Unix grep. هناك العديد من الخيارات. المذكورة أعلاه هي { GNUWin32 و cygwin و unxutils . أقل شهرة ، ولكن في بعض النواحي أفضل ، هي الأدوات الموجودة في (مجموعة أدوات الأداة المساعدة SFUA ، والتي تعمل في النظام الفرعي للتطبيقات المستندة إلى UNIX التي تأتي مباشرة في المربع مع Windows 7 الإصدار النهائي و Windows Server 2008 R2. (بالنسبة لنظام التشغيل Windows XP ، يمكن للمرء تنزيل وتثبيت خدمات لـ UNIX الإصدار 3.5 .) تحتوي مجموعة الأدوات هذه على عدد كبير من أدوات TUI لسطر الأوامر ، من mv و du ، عبر Korn و C shells ، إلى Perl و awk. إنه يأتي بطعم x86-64 و IA64 وكذلك x86-32. يتم تشغيل البرامج في بيئة POSIX الأصلية المناسبة لـ Windows ، بدلاً من استخدام DLLs المحاكي (مثل cygwin1.dll) وضع الأشياء على Win32. ونعم ، تحتوي مجموعة الأدوات على grep ، بالإضافة إلى حوالي 300 آخرين.
  • استخدم أحد أوامر Win32 grep الأصلية التي كتبها الناس ونشروها. يحتوي Tim Charron على { إصدار Win32 أصلي من نسخة معدلة GNU grep ، على سبيل المثال. هناك أيضًا { PowerGREP و Bare Grep و grepWin و AstroGrep و dnGrep ، على الرغم من أنها كلها واجهة المستخدم الرسومية برامج لا برامج توي.
  • استخدم الموفر find و findstr. يختلف بناء الجملة عن grep ، كما هو الحال في قدرة التعبير العادية.
44
JdeBP

إذا يُسمح باستخدام PowerShell الأوامر

PS C:\> Get-ChildItem | Select-String root

أو قصيرة

PS C:\> ls | sls root

يجب أن تدرك أن الاسم المستعار sls معرّف فقط بدءًا من PowerShell الإصدار 3.0. يمكنك إضافة اسم مستعار لكتابة أقل:

PS C:\> New-Alias sls Select-String

لتشغيل أمر PowerShell مباشرة من cmd ، استخدم

C:\>powershell -command "ls | select-string root"
18
oleschri

في مراجعتك المبكرة كتبت MS-DOS ، هناك FIND فقط ، حسب علمي. لكنه نظام تشغيل قديم لم يعد يستخدم بعد الآن.

في موجه أوامر Windows NT (على سبيل المثال ، Win2K والفوز XP والإصدارات الأحدث ، مثل win7 و win10) ، يمكنك استخدام find و findstr وإذا قمت بتنزيل GnuWin32 ثم grep

الاختلافات الأساسية هي أن findstr لديه بعض التعبيرات العادية الدعم. يدعم Grep التعبيرات العادية بشكل أفضل.

C:\>dir | find "abc"
C:\>dir | find /i "abc"

find /? و findstr /? يظهر لك ما تفعله المحولات.

Gnuwin32 لديه "حزم". إذا قمت بتنزيل GnuWin32 ، أقترح حزمة coreutils لمجموعة من الأدوات المساعدة المفيدة الأساسية التي قد تكون على دراية بها ، ولكن grep ليس في هذه الحزمة.

أضيفت

Grep في GnuWin32 ، آخر مرة راجعت ، قديم. Cygwin في grep هو أكثر بكثير حتى الآن. ضع في اعتبارك أيضًا أن العديد من الأشخاص يستخدمون الأجهزة الظاهرية بدلاً من منافذ windows من أوامر * nix.

16
barlop

إذا كنت تفضل استخدام grep ، بدلاً من findstr ، فهناك إصدار ملف .exe واحد في UnxUtils ، لذلك فهو محمول ولا توجد حاجة لتثبيته ، أو استخدام شيء مثل Cygwin.

9
paradroid

يمكنك محاولة تثبيت Chocolatey على Windows ، ومن خلال ذلك ، قم بتثبيت Gow الأداة. سيوفر لك هذا grep على Windows.

Gow لتقف على GNU على Windows. ويوفر الأدوات المساعدة لسطر الأوامر يونكس على ويندوز.

3
atur

استخدام باش

$ ls | grep root

كمد استخدام

> dir /b | findstr root

حيث /b تعني b قائمة الدلائل والملفات

2
vladkras

كتبت بديلاً لنظام Windows grep باستخدام Hybrid Batch/JScript code. لقد كتبت هذا لأن الحصول على شخصيات الهروب في منفذ GNU Win32 grep كان ألمًا حقيقيًا. يعمل هذا الإصدار كثيرًا مثل الطريقة التي تريد أن يعمل بها الإصدار GNU في 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);
        }
    }

}

يمكنك دائمًا العثور على أحدث إصدار في صفحة Gist الخاصة بي لهذا الغرض.

2
krowe

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]
1
user298490

إذا كنت ترغب في إضافة أبسط grep إلى بيئة Windows ، فانتقل إلى c:\windows\system32 وأضف نصًا برمجيًا صغيرًا باستخدام هذا الأمر:

echo findstr %1 > grep.bat

الآن انت تستطيع

dir | grep notepad.exe

وهو حقا مزيج مخيف من القرف. لذلك أضف نصًا برمجيًا آخر لـ ls كما هو موضح في هذا post

echo dir %1 > %systemroot%\system32\ls.bat

الآن تبدو الأمور مألوفة بعض الشيء

ls | grep notepad

HTH

0
domih

أود أن أقترح استخدام busybox-w32 ، لأنه لا يتجاوز حجمه 500 كيلو بايت ويتم صيانته بنشاط.

بحيث في حالتك ، في موجه الأوامر ، يكون:

busybox ls | busybox grep root

يمكنك استخدام doskey في أمر التشغيل الفوري بواسطة ملف دفعي لإنشاء أمر ، مثل:

doskey ls="path\to\busybox.exe" ls $*

doskey grep="path\to\busybox.exe" grep $*

ثم يمكنك استخدام ls | grep root في موجه الأوامر.

0
kissson

لا يزال بإمكانك استخدام grep وأوامر Linux الأخرى عن طريق تنزيل هذه الأداة UnxUtils وإضافته إلى متغير البيئة PATH

0
thucnguyen