Answers:
FINDSTR
所有Windows NT类操作系统都提供了一个名为的命令行工具(FINDSTR /?
在“命令提示符”窗口中键入以获取更多信息),它不支持所有grep
功能,但可能足以满足您的需求。
netstat -n | FINDSTR 3389
PowerShell(作为Windows 7 / 2008R2的标准提供,对于XP / 2003 / Vista / 2008是可选的),其中包括select-string
用于此目的的cmdlet。
Windows版Grep(由GnuWin Project提供)(2014-10-02:已过时,请参阅下面的评论)
Cygwin grep等;)
我还发现了另一种在Windows 7及更高版本中利用类似GREP的功能的方法,而无需安装任何额外的应用程序,在较旧的系统上,您可以使用install Powershell。
在Powershell中,用户可以使用Where-Object它具有相当全面的功能集,可提供GREP的所有功能以及更多功能。
希望能帮助到你。
我很惊讶没有人提到FINDSTR。我不是grep poweruser,但findstr做了我需要的工作,它过滤了文件和stdin,并提供了一些原始的正则表达式支持。随Windows一起提供。(编辑:有人提到了findstr,我想已经很晚了)
在Windows上,我使用Far Manager进行文件搜索。BSD许可,可在控制台中使用,节省了键入cmdline参数的时间。这是Alt-F7调用的搜索对话框。
更新:最初询问该问题时并非如此,但现在Microsoft允许用户安装适用于Linux的Windows子系统,然后Windows将运行grep。在PowerShell中,运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
UnxUtils是在Windows上运行的大量Unix实用程序。它具有grep,sed,gawk等。
出色且非常快速的文件搜索实用程序Agent Ransack支持正则表达式搜索。它主要是一个GUI实用程序,但也提供了命令行界面。
尽管从技术上讲不是grep或命令行,但Microsoft Visual Studio和Notepad ++都具有很好的“在文件中查找”功能,并具有完整的正则表达式支持。我发现自己经常使用它们,即使我在命令行上也可以使用grep的CygWin版本。
您显然已经获得了许多不同的建议。
对于免费的第三方实用程序,我个人的选择是:Agent Ransack
Agent Ransack下载
尽管其名称有些令人困惑,但它仍然可以很好地工作并且可以以多种方式用于查找文件。
祝好运
我们最近使用PowerGREP对数千个文件进行了一些相当高级的批量操作。包括在PDF文件的内容中进行正则表达式搜索,以及大规模更改PDF文档。
如果您想节省人工劳动的时间,那就值得了。您可以在购买之前尝试一下。
Oak Road Systems有一个商业grep实用程序。
我知道这是一个有点老的话题,但是,这是您可以做的另一件事。我在无法访问互联网且可用磁盘空间非常有限的开发人员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
。
我意识到这是一个老问题,但我偶然发现了此帖子以寻求答案。我发现了一个,所以在这里添加它以存储集体的互联网记忆
Powershell:选择字符串模块:Microsoft.PowerShell.Utility
https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.utility/select-string
以及内容丰富的博客文章和高级示例:“如何在PowerShell中“ grep”” https://antjanus.com/blog/web-development-tutorials/how-to-grep-in-powershell/
该博客文章中的一个简单示例:cat package.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中使用它
(我想这是原始意图;-)