Чи є еквівалент grep командного рядка для Windows 7? Тобто я хочу відфільтрувати результати команди:
Використання Bash:
ls | grep root
Що було б із командного рядка Windows?
Чи є еквівалент grep командного рядка для Windows 7? Тобто я хочу відфільтрувати результати команди:
Використання Bash:
ls | grep root
Що було б із командного рядка Windows?
Відповіді:
Findstr звучить як те, що ти хочеш. Я використовую його весь час як приблизний греп-еквівалент на платформі Windows.
Ще один приклад з трубами:
C:\> dir /B | findstr /R /C:"[mp]"
findstrполягає в тому, що схема регулярного виразів може не містити альтернатив.
findstrза замовчуванням мають? З Windows XP ?
Є кілька можливостей:
grep. Є кілька варіантів. Залишилися згадки GNUWin32 , cygwin та unxutils . Менш відомі, але в чомусь кращі - це інструменти з інструментарію утиліт SFUA , які запускаються в підсистемі для додатків на базі UNIX, що надходить прямо там у вікні з Windows 7 Ultimate Edition та Windows Server 2008 R2. (Для Windows XP можна завантажити та встановити Служби для UNIX версії 3.5 .) У цьому наборі інструментів є велика кількість інструментів TUI командного рядка з mvта duчерез оболонки Korn та C до perlтаawk. Він поставляється як у ароматах x86-64 та IA64, так і у x86-32. Програми запускаються в рідному POSIX середовищі Windows, а не з DLL-емуляторами (такими, як cygwin1.dll), які накладають речі на Win32. І так, інструментарій є grep, як і близько 300 інших.grepкоманд Win32, які люди написали та опублікували. Тим Чаррон, наприклад, має вбудовану версію Win32 модифікованої грейп GNU . Є також PowerGREP , Bare Grep , grepWin , AstroGrep і dnGrep , хоча це все програми GUI, а не програми TUI.findта findstr. Синтаксис відрізняється від того grep, примітка, як і можливість регулярного вираження.Якщо команди PowerShell дозволені, використовуйте
PS C:\> Get-ChildItem | Select-String root
або короткий
PS C:\> ls | sls root
Майте на увазі, що псевдонім slsвизначений лише починаючи з версії 3.0 PowerShell. Ви можете додати псевдонім для меншого набору тексту:
PS C:\> New-Alias sls Select-String
Щоб запустити команду PowerShell безпосередньо з cmd, використовуйте
C:\>powershell -command "ls | select-string root"
У першій редакції ви писали 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 не в тому, що це його власний пакет.
Додано
Греп GnuWin32, востаннє перевіряючи, старий. Позбавлення Cygwin набагато актуальніша. Також майте на увазі, що багато людей використовують віртуальні машини, а не порти Windows команд * nix.
Якщо ви скоріше використовуєте grep, а не findstr, є одна .exeверсія файлу в UnxUtils , тому вона є портативною і немає необхідності її встановлювати або використовувати щось на зразок Cygwin.
.zipфайл .exeфайлів. Єдиний невеликий недолік - це те, що версії трохи старі.
grepдля Windows: gnuwin32.sourceforge.net/packages/grep.htm
Ви можете спробувати встановити Chocolatey у Windows, а через це встановити інструмент Gow . Це забезпечить вас у grepWindows.
Gowстенд для GNU в Windows. Він надає утиліти командного рядка Unix у Windows.
Використання баша
$ ls | grep root
Використання Cmd
> dir /b | findstr root
де /bпозначає b - список каталогів та файлів
/B, /Rі /CОП не запитувала про це, в той час як моя відповідь дає точний еквівалент
/bзробити dirрезультат таким же, як і lsрезультат. Якщо ви протестуєте його, ви побачите різницю. Тож це не точний еквівалент.
Я написав альтернативу grep для Windows, використовуючи код Hybrid Batch / JScript. Я написав це, тому що виправлення символів втечі прямо у греповому порту GNU Win32 було справжнім болем. Ця версія працює набагато більше, як ви хочете, щоб версія 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 для цього.
Програма мультизамінника підготовлена таким чином, що багато функцій можна виконувати за допомогою параметрів командного рядка. Використання командного рядка наведено нижче:
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]
Я б запропонував використовувати zasedbox-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в командному рядку.
Якщо ви хочете додати найпростіший grepу ваше середовище Windows, перейдіть до 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