【发布时间】:2010-11-27 19:47:17
【问题描述】:
Windows 命令提示符中是否有与grep 类似的实用程序,或者是否有第三方工具可用?
【问题讨论】:
Windows 命令提示符中是否有与grep 类似的实用程序,或者是否有第三方工具可用?
【问题讨论】:
Grep for Windows by GnuWin Project (2014-10-02: 已经过时了,见下面的 cmets)
【讨论】:
有一个名为 FINDSTR 的命令行工具随所有 Windows NT 类操作系统一起提供(在命令提示符窗口中键入 FINDSTR /? 以获取更多信息)它不支持 grep 所做的一切,但它可能足以满足您的需求。
【讨论】:
netstat -n | FINDSTR 3389
PowerShell(在 Windows 7/2008R2 上作为标准包含,对于 XP/2003/Vista/2008 是可选的),其中包含用于此目的的 select-string cmdlet。
【讨论】:
UnxUtils 是一组在 Windows 上运行的 Unix 实用程序。它有grep、sed、gawk等。
【讨论】:
如果您不介意付费产品,PowerGREP 是我个人的最爱。
【讨论】:
我们最近使用PowerGREP 对数千个文件进行了一些相当高级的批量操作。包括在 PDF 文件内容中的正则表达式搜索,以及大规模修改 PDF 文档。
如果您想从人工劳动中节省时间,那么这笔钱是值得的。我认为您可以在购买前尝试一下。
【讨论】:
Cygwin grep 等等 ;)
【讨论】:
如果您必须使用裸 Windows,那么除了上面提到的 Powershell 选项之外,您还可以使用 VBScript,它具有良好的 RegEx 支持。
MS 在 Technet 上也有一个不错的脚本区,为管理员提供大量示例。
【讨论】:
我很惊讶没有人提到FINDSTR。我不是 grep 高级用户,但 findstr 可以满足我的需要,过滤文件和标准输入,并提供一些原始的正则表达式支持。随 Windows 和所有这些一起提供。 (编辑:嗯,有人确实提到了 findstr,我猜已经晚了)
【讨论】:
GnuWin32值得一提,它提供了所有标准linux工具的原生Win32版本,包括grep、file、sed、groff、indent等。
当这些工具的新版本发布时,它会不断更新。
【讨论】:
在 windows reskit 中有一个名为“qgrep”的实用程序。你可能已经把它放在你的盒子上了。 ;-) 它还带有“tail”命令,感谢上帝!
【讨论】:
虽然从技术上讲不是 grep 或命令行,但 Microsoft Visual Studio 和 Notepad++ 都具有非常好的 Find in Files 功能,并具有完整的正则表达式支持。我发现自己经常使用它们,即使我在命令行上也有 CygWin 版本的 grep。
【讨论】:
试试 LikeGrep java 实用程序吧。 在很多情况下它可能会对您有所帮助。 如您所愿,它还可以替换文件中的一些文本。 它保证对大文件的工作(测试高达 8 Gb)
【讨论】:
如上所述,gnuwin32 项目有一个 Windows CLI 版本的 grep。
如果你想要图形界面的东西,我会推荐(开源)工具AstroGrep。
【讨论】:
我已经有一段时间没有使用它们了,但是 Borland(现在是 Embarcadero)在他们的 C/C++ 编译器中包含了一个命令行 grep。一段时间以来,他们在注册后以free download 的形式提供了他们的 5.5 版本。
【讨论】:
我会将我的 0.02 美元添加到此线程。 dnGREP 是一款出色的 Windows 开源 grep 工具,支持撤消、Windows 资源管理器集成、在 PDF、zip、DOC 和其他一堆东西中搜索...
【讨论】:
Oak Road Systems 提供了一个商业 grep 实用程序。
【讨论】:
一个出色且非常快速的文件搜索实用程序Agent Ransack,支持正则表达式搜索。它主要是一个 GUI 实用程序,但也可以使用命令行界面。
【讨论】:
我还发现了另一种在 Windows 7 及更高版本中使用类似 GREP 的功能的方法,无需安装任何额外的应用程序,并且在旧系统上您可以使用安装 Powershell。
在Powershell,用户可以使用Where-Object,它具有相当全面的功能集,提供了GREP的所有功能以及更多功能。
希望对您有所帮助。
【讨论】:
如前所述,findstr 工作正常。示例:
C:>目录 | findstr 窗口
2013 年 11 月 6 日晚上 9:55 窗口
【讨论】:
一体化busybox包含grep / egrep / sed / awk等等
从:
更新:不再可用 - 或更旧的版本
【讨论】:
在 Windows 上,我使用 Far Manager 进行文件搜索。 BSD 许可,在控制台中工作,节省输入 cmdline 参数的时间。这是 Alt-F7 调用的搜索对话框。
【讨论】:
我推荐PowerGrep
几年前我不得不做一个电子发现项目。我发现fisdstr 有一些限制,尤其是 fisdstr 最终会失败
脚本必须使用几十个搜索词/短语来搜索数千个文件。
Cygwin 的 grep 工作得更好,它并没有经常卡顿,但最终我还是选择了 PowerGrep,因为图形界面可以更容易地判断崩溃的时间和地点,而且真的易于编辑我想要的所有条件和输出。最终,PowerGrep 是三者中最可靠的。
【讨论】:
是的,只有一个适用于 Windows PC 的程序具有可靠的 GUI,它对我来说是必不可少的工具。我是一名开发人员,在我拥有的每台计算机上,首先安装 XFind 程序。它创建于 1997 年,到现在为止的版本是 1.0,并且到现在为止,它是最好的。我经常需要在“.cs”、“.aspx”、“.sct”(Visual FoxPro 表单代码文件)或只是“.*”中搜索一些字符串XFind 扫描所有文件并向我显示文件,另一个很棒的事情是您可以查看文件中字符串的位置。 XFind 也有某种编辑器。如果它是二进制文件,它将显示找到的字符串。如果您像我一样是开发人员,请尝试并永远使用它。
【讨论】:
你显然得到了很多不同的建议。
我个人对免费的第 3 方实用程序的选择是:Agent Ransack
Agent Ransack Download
尽管它的名称有些混乱,但它运行良好并且可以以多种方式用于查找文件。
祝你好运
【讨论】:
我知道这是一个有点老的话题,但是你可以做另一件事。我在一个无法访问互联网且可用磁盘空间非常有限的开发人员 VM 上工作,因此我使用了安装在其上的 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。
【讨论】:
更新:最初问这个问题时这不是真的,但现在微软允许Install the Windows Subsystem for Linux,然后 Windows 将运行 grep。在 PowerShell 中,运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
【讨论】:
我意识到这是一个老问题,但我看到这篇文章寻求答案。我找到了一个,所以在这里添加它以供互联网集体记忆
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/
该博客文章中的一个简单示例: 猫包.json |选择字符串模式 webpack ls ./src/components/ |选择字符串-模式视图
C:> cat post.md |选择字符串-模式“^\w*:”
【讨论】:
使用 Cygwin...
它有 32 位和 64 位版本
它在 Windows 2000 (*) 上运行良好
到 Windows 10 或 Server 2019
我用 Cygwin 很长时间了...
并且最近尝试用 Windows-Linux-Subsystems 代替...
不会太久...
我很快又回到了 Cygwin...
更加灵活、可控和丰富...
侵入性也较小...
只需将 \bin 添加到路径...
并且您可以在 Windows/Batch/Powershell 中以任何方式使用它...
或在 DOS-Box... 或在 Powershell-Box...
您还可以安装大量出色的软件包
真的很管用……就像 nginx 或 PHP 一样……
我什至在我的 IIS 中使用 Cygwin PHP 包...
作为奖励,您还可以在 bash shell 中使用它...
(我认为这是最初的意图;-))
【讨论】: