Есть ли в командной строке grep эквивалент для Windows 7? То есть я хочу отфильтровать результаты команды:
Использование Bash:
ls | grep root
Что бы это было из командной строки Windows?
Есть ли в командной строке grep эквивалент для Windows 7? То есть я хочу отфильтровать результаты команды:
Использование Bash:
ls | grep root
Что бы это было из командной строки Windows?
Ответы:
Findstr звучит как то, что вы хотите. Я использую его все время как приблизительный эквивалент grep на платформе 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, которые люди написали и опубликовали. Тим Чаррон, например, имеет встроенную версию модифицированной GNU grep для Win32 . Существуют также PowerGREP , Bare Grep , grepWin , AstroGrep и dnGrep , хотя это все программы с графическим интерфейсом, а не программы TUI.find
и findstr
. grep
Обратите внимание, что синтаксис отличается от синтаксиса регулярных выражений.Если команды 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"
В своей ранней редакции вы написали 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 не является его собственным пакетом.
добавленной
Gp GnuWin32, последний раз, когда я проверял, старый. Grep Cygwin's намного более современный. Также имейте в виду, что многие люди используют виртуальные машины, а не порты Windows команд * nix.
Если вы предпочитаете использовать grep
вместо UnxUtils версию findstr
с одним .exe
файлом , она переносима, и вам не нужно устанавливать ее или использовать что-то вроде Cygwin.
.zip
файл .exe
файлов. Единственным небольшим недостатком является то, что версии немного старые.
grep
для Windows: gnuwin32.sourceforge.net/packages/grep.htm
Вы можете попробовать установить Chocolatey в Windows, а затем установить инструмент Gow . Это предоставит вам grep
на Windows.
Gow
стоять за GNU на Windows. Он предоставляет утилиты командной строки Unix в Windows.
Использование Bash
$ ls | grep root
Cmd использовать
> dir /b | findstr root
где b/b
обозначает список каталогов и файлов
/B
, /R
и /C
OP не спрашивал о чем, в то время как мой ответ дает точный эквивалент
/b
, Чтобы сделать dir
вывод такой же , как на ls
выходе. Если вы проверите это, вы увидите разницу. Так что это не точный эквивалент.
Я написал альтернативу grep для Windows с использованием кода Hybrid Batch / JScript. Я написал это потому, что получить экранирующие символы прямо в grep-порте 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]
Я бы предложил использовать 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
в командной строке.
Если вы хотите добавить простейшую 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
НТН
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