使用bash:
ls | grep root
Windows命令的作用是什么提示吗?
#1 楼
Findstr听起来像您想要的。我一直使用它作为Windows平台上的近似grep等效。另一个带有管道的示例:
C:\> dir /B | findstr /R /C:"[mp]"
评论
是的,这似乎是我想要的。我了解可能存在限制。我会尝试的。
–chrisjlee
2011年6月22日21:11
他们为什么不能把它叫做grep!
– Victor Grazi
2015年9月8日15:15
@VictorGrazi他们最初确实是这样做的,请参阅本文。它最初名为qgrep-但后来被重命名。
– Zitrax
16年2月1日在14:23
findstr的最大问题是,正则表达式模式可能不包含替代项。
–狼
16年6月16日在13:15
/ R和/ C在这里代表什么?
–莫妮卡的革命
19年2月11日14:21
#2 楼
有几种可能:使用Unix
grep
命令的端口。有几种选择。经常提到的是GNUWin32,cygwin和unxutils。 SFUA实用工具包中的工具鲜为人知,但在某些方面却更好,它们在Windows 7 Ultimate Edition和Windows Server 2008 R2的包装盒中的基于UNIX的应用程序子系统中运行。 (对于Windows XP,可以下载并安装UNIX 3.5版的服务。)此工具包具有大量的命令行TUI工具,从mv
和du
到Korn和C Shell,再到perl
和awk
。它具有x86-64和IA64两种版本以及x86-32。这些程序在Windows的本机POSIX环境中运行,而不是通过Win32上的仿真器DLL(例如cygwin1.dll
)进行分层。是的,该工具包具有grep
以及其他300个。使用人们编写和发布的许多本机Win32
grep
命令之一。例如,Tim Charron具有修改过的GNU grep的本地Win32版本。也有PowerGREP,Bare Grep,grepWin,AstroGrep和dnGrep,尽管它们都是GUI程序,而不是TUI程序。请使用提供的
find
和findstr
。语法与grep
的语法不同,请注意,正则表达式功能也是如此。评论
cygwin在Win 7上为我工作得很好。我需要grep,而GnuWin32 grep对我不起作用。
– Kozuch
2014年2月21日,11:58
您写我在SUA C中看不到perl:\ Windows \ SUA> dir perl * / s / b找不到文件并正在运行,例如SUA的C shell我在/ bin中看不到
– barlop
15年5月27日在21:12
您还写道SFUA在某些方面更好。以什么方式?
– barlop
16-4-24在11:17
@Kozuch除非您声明它不起作用,否则您的评论无用
– barlop
16-4-24在11:18
#3 楼
如果允许使用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"
评论
Grep,Powershell方式。 communary.net/2014/11/10/grep-the-powershell-way
–Charles Burge
17年1月9日在22:59
#4 楼
在您的早期版本中,您编写了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端口。
#5 楼
如果您宁愿使用grep
而不是findstr
,则UnxUtils中只有一个.exe
文件版本,因此它是可移植的,不需要安装它,也无需使用Cygwin之类的东西。评论
这很有趣,但是需要安装该工具。
–chrisjlee
2011年6月22日21:11
@Chris:没有安装。这只是.exe文件的.zip文件。唯一的小缺点是版本略旧。
–天堂
2011年6月22日在21:13
过时的缺点是什么?软件可以旧吗?所有新字节。
–用户未知
2011年6月23日,下午1:43
GnuWin32还为Windows提供了grep:gnuwin32.sourceforge.net/packages/grep.htm
– LiuYan刘研
2011年6月23日在1:54
@user众所周知,例如,unxutils sed命令较旧,不支持\ d例如。 \ d22指定引号。较旧的wget可能不会下载较新的wget的页面,如果您寻求支持,他们可能会要求您获得最新的页面,因为这样可以解决一些问题。毫无疑问,一个真正古老的grep不会具有当前regex支持的水平
– barlop
2014年9月3日在18:59
#6 楼
您可以尝试在Windows上安装Chocolatey,然后通过该工具安装Gow工具。这将为您在Windows上提供grep
。Gow
在Windows上代表GNU。它在Windows上提供Unix命令行实用程序。评论
这是一个程序包管理器,就像apt-get一样,但是用于Windows。它的名字叫“ cos开发人员”,它是基于Visual Studio的软件包管理器NuGet来开发的,听起来像金块(如鸡块),所以他认为他会“有趣”或“聪明”并打电话给他的程序Chocolatey NuGet。我在采访他的播客中听到了这一消息。 Gow也可以独立下载
– barlop
15年7月29日在0:01
我是Gow的新手,经过几天的使用,我可以证明我非常喜欢它-它比我以前使用的所有UNIX utils的旧端口都要好。
– Radio Cernej
16年1月24日在20:23
@RadimCernej,除非您声明自己认为更好,否则您的评论将无用。
– barlop
16年7月18日在15:57
@barlop:自从我在2016年1月发表评论以来,我逐渐完全转向了Gow。到目前为止,还没有错误,它具有我需要/使用的所有实用程序,路径以Microsoft格式输出(使其易于复制/粘贴到其他程序)。 Gow具有足够的非侵入性(易于安装和移除),因此我强烈建议您试驾一下。
– Radio Cernej
16年7月18日在19:35
#7 楼
我使用混合批处理/ JScript代码编写了Windows替代grep的代码。我之所以这样写,是因为在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页面上始终为此找到最新版本。
#8 楼
重击使用$ ls | grep root
Cmd使用
> dir /b | findstr root
其中
/b
代表目录和文件的裸列表评论
这将重复另一个答案,并且不添加任何新内容。除非您确实有新的贡献,否则请不要发布答案。
–DavidPostill♦
16年5月2日在10:04
@DavidPostill:这是“ TL; DR”用户(如我)的快速解决方案
–vladkras
16年5月4日在12:17
这不是添加没有任何新贡献的答案的借口。无论如何,被接受的答案将始终首先出现,因此将在您之前被阅读。
–DavidPostill♦
16年5月4日在12:18
@DavidPostill,不要介意,但是接受的答案包含多个多余的和无法解释的键/ B,/ R和/ C OP没问,而我的答案给出了完全相同的答案
–vladkras
16-5-4在12:37
/ b用于使dir输出与ls输出相同。如果您对其进行测试,将会看到不同之处。因此,它不是完全等效的。
–DavidPostill♦
16年5月4日在12:43
#9 楼
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]
#10 楼
通过下载此工具UnxUtils并将其位置添加到您的grep
环境变量中,您仍然可以使用熟悉的PATH
和其他Linux命令。评论
unxutils grep并不迟到.. unx grep是2.4.2,但是gnuwin32有一个更高的2.5.4。
– barlop
15年7月29日在0:05
#11 楼
我建议使用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
。评论
它也有一个Android版本
– barlop
16年7月18日在15:59
#12 楼
如果要将最简单的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
#13 楼
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
评论
顺便说一句,这个沉闷的答案在著名的俄罗斯开发博客habrahabr.ru/post/71568上有44票赞成
–vladkras
16年5月2日,下午5:53
评论
不要将ms-dos与命令提示符混淆。 +对于Windows,使用find和findstr甚至grep都可以通过快速搜索轻松找到。甚至在linux和Windows中都存在等效命令表。同样,您的bash示例甚至不是特定于bash的。.我想是* nix OS。