Answers:
findstr
是正则表达式模式可能不包含替代方案。
findstr
默认情况下其他版本的Windows有哪些?从Windows XP开始?
有几种可能性:
grep
命令的端口。有几种选择。提到的是GNUWin32,cygwin和unxutils。SFUA实用工具包中的工具不太为人所知,但在某些方面更好,它们运行在基于UNIX的应用程序子系统中,它随附在Windows 7旗舰版和Windows Server 2008 R2的框中。(对于Windows XP,可以下载并安装用于UNIX版本3.5服务的。)该工具包有大量的命令行工具TUI,mv
并du
通过了Korn和C shell,要perl
和awk
。它有x86-64和IA64两种版本以及x86-32。这些程序在Windows本地适当的POSIX环境中运行,而不是cygwin1.dll
在Win32上使用模拟器DLL(例如)分层。是的,该工具包grep
以及其他约300个工具包。grep
人们编写和发布的许多本机Win32 命令之一。 例如,Tim Charron有一个修改过的GNU grep的原生Win32版本。还有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
仅从PowerShell 3.0版开始定义。您可以为较少的输入添加别名:
PS C:\> New-Alias sls Select-String
要直接从cmd运行PowerShell命令,请使用
C:\>powershell -command "ls | select-string root"
在你早期的修订中,你写了MS-DOS,FIND
据我所知,这是唯一的。但这是一个不再使用的古老操作系统了。
在Windows NT命令提示符下(例如Win2K和win 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的grep,我上次检查时,已经老了。Cygwin的grep更新了。还要记住,许多人使用虚拟机而不是* nix命令的Windows端口。
如果你更愿意使用grep
,而不是在UnxUtils中findstr
有一个.exe
文件版本,那么它是可移植的,不需要安装它,或使用像Cygwin这样的东西。
.zip
文件.exe
文件。唯一的小缺点是版本略显陈旧。
grep
Windows:gnuwin32.sourceforge.net/packages/grep.htm
您可以尝试在Windows上安装Chocolatey,然后安装Gow工具。这将为您提供grep
Windows。
Gow
代表Windows上的GNU。它在Windows上提供Unix命令行实用程序。
Bash使用
$ ls | grep root
使用Cmd
> dir /b | findstr root
其中b/b
代表目录和文件列表
/B
,/R
和/C
OP并没有问,而我的回答给了确切的等效
/b
是使dir
输出一样的ls
输出。如果你测试它,你会看到差异。所以它不是完全相同的。
我使用Hybrid Batch / JScript代码编写了一个替代grep的Windows替代品。我写这个是因为在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页面上找到最新版本。
已经准备好多重替换程序,以便可以使用命令行参数执行许多功能。命令行用法如下所示:
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 KB的大小并且积极维护。
因此,在您的情况下,在命令提示符中,它是:
busybox ls | busybox grep root
您可以doskey
在命令提示符下使用批处理文件来启动命令,例如:
doskey ls="path\to\busybox.exe" ls $*
doskey grep="path\to\busybox.exe" grep $*
然后您可以ls | grep root
在命令提示符下使用。
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