Чи є еквівалент 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 . Це забезпечить вас у grep
Windows.
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