Windows命令提示符中是否有与grep
类似的实用程序,或者是否有第三方工具?
答案 0 :(得分:223)
有一个名为FINDSTR
的命令行工具,它附带所有Windows NT类操作系统(在命令提示符窗口中键入FINDSTR /?
以获取更多信息)它不支持所有内容{{ 1}}但它可能足以满足您的需求。
答案 1 :(得分:33)
Grep for Windows by GnuWin Project(2014-10-02:已过时,请参阅下面的评论)
答案 2 :(得分:32)
PowerShell(作为Windows 7 / 2008R2的标准版,XP / 2003 / Vista / 2008的可选版),其中包含用于此目的的select-string
cmdlet。
答案 3 :(得分:24)
如上所述,findstr工作正常。例如:
C:> dir | findstr Windows
11/06/2013 09:55 PM Windows
答案 4 :(得分:11)
Cygwin grep等等;)
答案 5 :(得分:11)
我还发现了在Windows 7及更高版本中使用GREP功能的另一种方法,无需安装任何额外的应用程序,在旧系统上,您可以使用安装Powershell。
在Powershell中,用户可以使用Where-Object它具有相当全面的功能集,可提供GREP的所有功能以及更多功能。
希望它有所帮助。
答案 6 :(得分:10)
我很惊讶没有人提到FINDSTR。我不是grep poweruser,但是findstr做了我需要它,过滤文件和stdin,有一些原始的正则表达式支持。使用Windows和所有这些。 (编辑:有人确实提到了发现,我猜迟了)
答案 7 :(得分:6)
GnuWin32值得一提的是,它提供了所有标准linux工具的原生Win32版本,包括grep,file,sed,groff,indent等。
当这些工具的新版本发布时,它会不断更新。
答案 8 :(得分:4)
在Windows上,我使用Far Manager进行文件搜索。 BSD许可,在控制台中工作,节省了输入cmdline参数的时间。这是Alt-F7调用的搜索对话框。
答案 9 :(得分:3)
UnxUtils是在Windows上运行的一组很棒的Unix实用程序。它有grep,sed,awk等。
答案 10 :(得分:3)
更新:当问题最初被问到时,这不是真的,但现在微软允许一个Install the Windows Subsystem for Linux,然后Windows将运行grep。在PowerShell中,运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
答案 11 :(得分:3)
优秀且速度非常快的文件搜索实用程序Agent Ransack支持正则表达式搜索。它主要是一个GUI实用程序,但也可以使用命令行界面。
答案 12 :(得分:2)
在windows reskit中有一个名为“qgrep”的实用程序。你可能已经把它放在你的盒子上了。 ;-)它还带有“尾巴”命令,谢天谢地!
答案 13 :(得分:1)
我会将0.02美元添加到此主题中。 dnGREP是一个很棒的开源grep工具,用于支持撤消,Windows资源管理器集成,搜索PDF,拉链,DOC和其他一些内容......
答案 14 :(得分:1)
你显然已经得到了很多不同的建议
我个人对免费第三方实用程序的选择是:代理Ransack
Agent Ransack Download
尽管名称有点令人困惑,但它运行良好,可以通过各种方式查找文件。
祝你好运
答案 15 :(得分:1)
是的,只有一个Windows PC程序具有可靠的GUI,对我来说它是必不可少的。我是一名开发人员,在我拥有的每台计算机上,首先安装XFind程序。它创建于1997年,直到现在版本为1.0,直到现在工作,它是最好的。我经常需要在“ .cs”,“ .aspx”,“ .sct”(Visual FoxPro表单代码文件)或“。*”中搜索一些字符串。和XFind扫描所有文件并显示文件,另一个好处是你可以查看文件中的字符串。 XFind也有某种编辑器。如果它是二进制文件,它将显示字符串finded。如果您是像我这样的开发人员,请尝试并永久使用它。
答案 16 :(得分:1)
虽然技术上不是grep也不是命令行,但Microsoft Visual Studio和Notepad++都具有非常好的“在文件中查找”功能,并且具有完整的正则表达式支持。我发现自己经常使用它们,即使我在命令行上也有CygWin版本的grep。
答案 17 :(得分:0)
自从我使用它们已经有一段时间了,但Borland(现在的Embarcadero)在其C / C ++编译器中包含了命令行grep。一段时间后,他们在注册后将其5.5版本作为free download提供。
答案 18 :(得分:0)
Oak Road Systems提供了一个商业grep工具。
答案 19 :(得分:0)
如上所述,gnuwin32项目具有Windows CLI版本的grep。
如果你想要一个带图形界面的东西,我会推荐(开源)工具AstroGrep。
答案 20 :(得分:0)
试试LikeGrep java实用程序。 在很多情况下它可能对你有帮助。 如您所愿,它还可以替换文件中的一些文本。 它保证了它在大型文件(最高8 Gb测试)上的工作
答案 21 :(得分:0)
all-in-one busybox包含grep / egrep / sed / awk以及更多
从以下地址获取:
或一些较旧的
答案 22 :(得分:0)
如果你必须使用裸Windows,那么除了上面提到的Powershell选项之外,你还可以使用VBScript,它有很好的RegEx支持。
MS在Technet上也有一个不错的脚本区域,为管理员提供了大量示例。
答案 23 :(得分:0)
我建议 PowerGrep
几年前我不得不做一个电子发现项目。我发现fisdstr
有一些限制,尤其是 fisdstr最终会失败
脚本必须使用几十个搜索词/短语搜索数千个文件。
Cygwin的grep工作得更好,它并没有经常窒息,但最终我去了PowerGrep,因为图形界面让它更容易分辨出崩溃的时间和地点,在我想要的所有条件和输出中编辑也非常容易。最终 PowerGrep是三者中最可靠的。
答案 24 :(得分:0)
我们最近使用PowerGREP对数千个文件进行了一些相当高级的批量操作。包括在PDF文件的内容中搜索正则表达式,以及在大规模中更改PDF文档。
如果你想节省manuel劳工的时间,那值得花钱。你可以在买之前尝试一下。
答案 25 :(得分:0)
如果您不介意付费产品,PowerGREP是我个人的最爱。
答案 26 :(得分:0)
我知道这有点老话题,但是,这是你可以做的另一件事。我在开发人员虚拟机上工作,没有互联网访问权限,而且可用磁盘空间非常有限,所以我使用了安装在其上的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 -printGroup=1 "expression" file.txt
。
答案 27 :(得分:0)
答案 28 :(得分:0)
我意识到这是一个老问题,但我偶然发现了此帖子以寻求答案。而且我发现了一个,所以在这里添加它以存储集体的互联网记忆
Powershell:选择字符串 模块: Microsoft.PowerShell.Utility
https://docs.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/
该博客文章中的一个简单示例: 猫package.json |选择字符串-模式webpack ls ./src/components/ |选择字符串-模式视图
C:> cat post.md |选择字符串-模式“ ^ \ w *:”
答案 29 :(得分:0)
使用Cygwin ...
它具有32位和64位版本
可以在Windows 2000(*)上正常运行
到Windows 10或Server 2019
我使用Cygwin很久了...
并且最近尝试用Windows-Linux-Subsystems代替...
好久不见...
我很快又回到了Cygwin ...
更加灵活,可控制和丰富...
也较少打扰...
只需将\ bin添加到路径...
您可以在Windows / Batch / Powershell中使用任何软件...
或DOS盒子...或Powershell盒子...
您还可以安装大量出色的软件包
确实有效...像nginX或PHP ...
我什至在IIS中使用Cygwin PHP软件包...
作为奖励,您还可以在bash shell中使用它...
(我认为这是最初的意图;-))
答案 30 :(得分:0)
可能是Everything吗?它支持正则表达式,并且还具有控制台实用程序。
答案 31 :(得分:0)
自2009年以来,发生了很多事情。 Rust提供了许多CLI实用程序,其中ripgrep。它被宣传为递归搜索目录中的正则表达式模式,支持 Windows ,MacOSX和Linux。
这是快速。 Look at this performance comparison with similar tools。它还对工具的设计有很多解释。内容丰富且令人讨厌。 =)
支持POSIX grep工具支持的多种功能。 Look at the comparison by ack author here。
如果您有Scoop,则可以使用scoop install ripgrep
安装它。否则前往installation section of the doc。