在Windows命令提示符中是否有类似grep的工具,或者是否有第三方工具?
grep
Grep for Windows由GnuWin项目(2014-10-02:过时了,见下面的评论)
所有Windows nt类操作系统都有一个名为FINDSTR的命令行工具(在命令提示符窗口中键入FINDSTR /?以获取更多信息),它不支持grep所做的所有事情,但它可能足以满足您的需求。
FINDSTR
FINDSTR /?
PowerShell(作为Windows 7/2008R2的标准包含,XP/2003/Vista/2008的可选),它为此目的包含select-string cmdlet。
select-string
UnxUtils是一组运行在Windows上的Unix实用程序。它有grep, sed, gawk等。
如果你想要一个GUI, 裸露的Grep是很好的。Gnu grep适合CLI
如果您不介意付费产品,PowerGREP是我个人的最爱。
我们最近使用PowerGREP对数千个文件进行了一些相当高级的批量操作。包括PDF文件内容的正则表达式搜索,以及大规模修改PDF文档。
如果你想节省体力劳动的时间,它值这个钱。我认为你可以在买之前试用一下。
Cygwin grep and more;)
如果你必须使用纯Windows,那么除了上面提到的Powershell选项,你还可以使用VBScript,它有很好的RegEx支持。
MS在Technet上还有一个不错的脚本编写区,为管理员提供了大量的示例。
我很惊讶没有人提到中。我不是grep poweruser,但findstr做什么我需要它,过滤文件和stdin,与一些基本的正则表达式支持。装有Windows系统的船。(编辑:嗯,有人提到了findstr,我猜是晚了)
GnuWin32值得一提,它提供了原生Win32版本的所有标准linux工具,包括grep, file, sed, groff, indent等。
当这些工具的新版本发布时,它会不断更新。
在windows reskit中有一个名为“qgrep”的实用程序。你的盒子上可能已经有了。;-)它还带有“尾巴”命令,感谢上帝!
虽然在技术上不是grep或命令行,Microsoft Visual Studio和notepad++都有一个非常好的文件查找功能,完全支持正则表达式。我发现自己经常使用它们,即使我在命令行上也有CygWin版本的grep可用。
如上所述,gnuwin32项目有一个Windows CLI版本的grep。
如果你想要一个图形界面,我会推荐(开源)工具AstroGrep。
我已经有一段时间没有使用它们了,但是Borland(现在是Embarcadero)在他们的C/ c++编译器中包含了命令行grep。一段时间以来,他们在注册后以免费下载的形式提供了他们的5.5版本。
我将把我的0.02美元添加到这个线程中。dnGREP是一个很棒的开源grep窗口工具,它支持撤销,windows资源管理器集成,在pdf, zip, DOCs和其他一堆东西中搜索…
有一个商业grep实用程序可从橡树路系统。
一个优秀且非常快速的文件搜索工具代理洗劫支持正则表达式搜索。它主要是一个GUI实用程序,但也可以使用命令行界面。
我还发现了在Windows 7及以上版本中使用类似GREP的功能的另一种方法,无需安装任何额外的应用程序,在旧系统上,您可以使用安装Powershell。
在Powershell中,用户可以使用都,它具有相当全面的功能集,提供了GREP的所有功能以及更多。
希望有帮助。
如前所述,findstr工作得很好。例子:
C:>dir | findstr Windows
11/06/2013 09:55 PM Windows
其中,一体化的busybox包含grep / egrep / sed / awk等
从下面得到:
更新:不再可用-或一些旧的
在Windows上,我使用到经理进行文件搜索。BSD许可,在控制台工作,节省输入cmdline参数的时间。下面是Alt-F7调用的搜索对话框。
我推荐PowerGrep
几年前我做了一个电子发现项目。我发现fisdstr有一些限制,尤其是Fisdstr最终会失败
fisdstr
该脚本必须使用几十个搜索词/短语在数千个文件中搜索。
Cygwin的grep工作得更好,它不经常窒息,但最终我去了PowerGrep,因为图形界面使它更容易告诉它崩溃的时间和地点,而且它真的很容易编辑所有的条件和输出,我想要的。最终PowerGrep是最可靠的的三个。
是的,Windows PC只有一个程序,它有坚实的GUI,对我来说是必不可少的。我是一名开发人员,在我拥有的每台电脑上,第一件事就是安装XFind程序。它创建于1997年,到目前为止版本是1.0,到目前为止,它是最好的。我经常需要搜索“cs”、“. xml”中的某个字符串。aspx”、“.sct" (Visual FoxPro表单代码文件)或"。*"和XFind扫描所有文件,并显示文件,另一个伟大的事情是,你可以看到字符串在文件中的位置。XFind也有某种编辑器。如果它是二进制文件,它会显示你字符串找到。如果您像我一样是开发人员,请尝试并永远使用它。
祝你好运
我知道这是一个有点老的话题,但是,还有一件事你可以做。我在一个开发人员虚拟机上工作,没有互联网接入,空闲磁盘空间非常有限,所以我使用了安装在上面的java。
编译一个小java程序,打印正则表达式匹配到控制台。将jar放在你系统的某个地方,创建一个批处理来执行它,并将文件夹添加到你的PATH变量中:
JGrep.java:
package com.jgrep; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JGrep { public static void main(String[] args) throws FileNotFoundException, IOException { int printGroup = -1; if (args.length < 2) { System.out.println("Invalid arguments. Usage:"); System.out.println("jgrep [...-MODIFIERS] [PATTERN] [FILENAME]"); System.out.println("Available modifiers:"); System.out.println(" -printGroup - will print the given group only instead of the whole match. Eg: -printGroup=1"); System.out.println("Current arguments:"); for (int i = 0; i < args.length; i++) { System.out.println("args[" + i + "]=" + args[i]); } return; } Pattern pattern = null; String filename = args[args.length - 1]; String patternArg = args[args.length - 2]; pattern = Pattern.compile(patternArg); int argCount = 2; while (args.length - argCount - 1 >= 0) { String arg = args[args.length - argCount - 1]; argCount++; if (arg.startsWith("-printGroup=")) { printGroup = Integer.parseInt(arg.substring("-printGroup=".length())); } } StringBuilder sb = new StringBuilder(); try (BufferedReader br = new BufferedReader(new FileReader(filename))) { sb = new StringBuilder(); String line = br.readLine(); while (line != null) { sb.append(line); sb.append(System.lineSeparator()); line = br.readLine(); } } Matcher matcher = pattern.matcher(sb.toString()); int matchesCount = 0; while (matcher.find()) { if (printGroup > 0) { System.out.println(matcher.group(printGroup)); } else { System.out.println(matcher.group()); } matchesCount++; } System.out.println("----------------------------------------"); System.out.println("File: " + filename); System.out.println("Pattern: " + pattern.pattern()); System.out.println("PrintGroup: " + printGroup); System.out.println("Matches: " + matchesCount); } }
c: \ jgrep \ jgrep.bat(与jgrep.jar一起):
@echo off java -cp c:\jgrep\jgrep.jar com.jgrep.JGrep %*
并在PATH环境变量的末尾添加c: \ jgrep。
现在只需从任何地方调用jgrep "expression" file.txt。
jgrep "expression" file.txt
我需要从表达式中输出一些特定的组,所以我添加了一个修饰符,并将其命名为jgrep -printGroup=1 "expression" file.txt。
jgrep -printGroup=1 "expression" file.txt
更新:最初问这个问题时,这不是真的,但现在微软让一个安装Windows子系统for Linux,然后Windows将运行grep。在PowerShell中运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
我知道这是一个老问题,但我看到这个帖子寻求答案。我找到了一个,所以把它添加到这里,作为互联网的集体记忆
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string
和一个信息丰富的博客文章与高级示例:“如何在PowerShell中“grep”” https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/ < / p > 一个简单的例子来自那篇博客文章: 猫包。选择字符串-模式webpack . json | ls ./src/components/ | Select-String -Pattern View
C:>猫帖。md | Select-String -Pattern "^\w*:"
使用Cygwin…< br >
它有32位和64位版本 并且它可以在Windows 2000 (*)中正常工作 Windows 10或Server 2019
我用Cygwin很长时间了…< br > 最近尝试用windows - linux -子系统来替代…
不会太久…< br > 我很快又回到了Cygwin……< br > < / p >
更加灵活、可控和丰富 也不那么打扰…< br > < / p >
只添加\bin到路径…< br > 你可以在Windows/Batch/Powershell中使用它 或者在DOS-Box里…或者装在powershell盒子里…< / p >
你也可以安装一大堆很棒的软件包 这真的有用……比如nginX或PHP… 我甚至在我的IIS中使用Cygwin PHP包 作为奖励,我们也可以从bash shell中使用它 (我认为这是最初的意图;-))
可能是一切?它支持regexp,也有一个控制台util。
自2009年以来,发生了很多事情。Rust提供了许多CLI实用程序,其中包括ripgrep。它被宣传为递归地搜索目录中的正则表达式模式,支持窗户, MacOSX和Linux。
它是快。看看与类似工具的性能比较。对工具的设计也有很多解释。信息量很大,也很怪。=)
支持POSIX grep工具支持的广泛特性。看看ack作者的比较。
如果你有Scoop,你可以用scoop install ripgrep安装它。否则转到文档的安装部分。
scoop install ripgrep