288

对 Windows 的grep工具有什么建议吗?理想情况下,可以利用 64 位操作系统。

我当然知道Cygwin,并且也找到了PowerGREP,但我想知道那里是否有任何隐藏的宝石?

4

28 回答 28

336

FINDSTR相当强大,支持正则表达式,并且已经在所有 Windows 机器上具有优势。

c:\> FindStr /?

Searches for strings in files.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         Matches pattern if at the beginning of a line.
  /E         Matches pattern if at the end of a line.
  /L         Uses search strings literally.
  /R         Uses search strings as regular expressions.
  /S         Searches for matching files in the current directory and all
             subdirectories.
  /I         Specifies that the search is not to be case-sensitive.
  /X         Prints lines that match exactly.
  /V         Prints only lines that do not contain a match.
  /N         Prints the line number before each line that matches.
  /M         Prints only the filename if a file contains a match.
  /O         Prints character offset before each matching line.
  /P         Skip files with non-printable characters.
  /OFF[LINE] Do not skip files with offline attribute set.
  /A:attr    Specifies color attribute with two hex digits. See "color /?"
  /F:file    Reads file list from the specified file(/ stands for console).
  /C:string  Uses specified string as a literal search string.
  /G:file    Gets search strings from the specified file(/ stands for console).
  /D:dir     Search a semicolon delimited list of directories
  strings    Text to be searched for.
  [drive:][path]filename
             Specifies a file or files to search.

Use spaces to separate multiple search strings unless the argument is prefixed
with /C.  For example, 'FINDSTR "hello there" x.y' searches for "hello" or
"there" in file x.y.  'FINDSTR /C:"hello there" x.y' searches for
"hello there" in file x.y.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurances of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word

示例用法:findstr text_to_find *或递归搜索findstr /s text_to_find *

于 2008-09-17T20:38:01.660 回答
214

根据评论中的建议,我开始使用grepWin,它很棒而且免费


(我仍然是PowerGREP的粉丝,但我不再使用它了。)

我知道你已经提到过,但是 PowerGREP很棒

我最喜欢的一些功能是:

  • 右键单击文件夹以在其上运行 PowerGREP
  • 使用正则表达式或文字文本
  • 为要包含和排除的文件指定通配符
  • 搜索和替换
  • 预览模式很好,因为您可以确保您正在替换您打算替换的内容。

现在我意识到其他 grep 工具可以完成以上所有工作。只是 PowerGREP 将所有功能打包到一个非常易于使用的 GUI 中。

来自为您带来RegexBuddy的同样出色的人,而我与他们没有任何关系,只是喜欢他们的东西。(需要注意的是,RegexBuddy 本身包含一个基本版本的 grep(适用于 Windows),它的成本比 PowerGREP 低很多。)


其他解决方案

现有的 Windows 命令

Windows 上的 Linux 命令实现

具有图形界面的 Grep 工具

其他 Grep 工具

于 2008-09-17T20:37:27.730 回答
111

GrepWin是免费和开源的 (GPL)

在此处输入图像描述

我一直在使用由TortoiseSVN中的一个人编写的 grepWin。它在 Windows 上完成了这项工作......

于 2010-11-29T22:11:29.187 回答
57

2013 年 7 月更新:

我现在在 Windows 上一直使用的另一个 grep 工具是AstroGrep

AstroGrep 真棒

它向我展示的不仅仅是行搜索(即命令行 grep 的 --context=NUM)的能力是无价的。
而且速度很快。速度非常快,即使在没有SSD驱动器的旧计算机上也是如此(我知道,他们曾经用旋转磁盘来做这个硬盘驱动器,称为platters,很疯狂吧?)

这是免费的。
它是可移植的(简单的 zip 存档解压缩)。


原始答案 2008 年 10 月

替代文字Gnu Grep没问题

例如,您可以在此处下载它:(站点 ftp

所有常用选项都在这里。

结合gawkxargs(包括来自GnuWin32的 'find' ),你可以真正像在 Unix 上一样编写脚本!

另请参阅我用于递归 grep 的选项

grep --include "*.xxx" -nRHI "my Text to grep" *
于 2008-09-17T20:37:11.037 回答
31

PowerShell 的Select-String cmdlet 在 v1.0 中很好,但在v2.0 中要好得多。将 PowerShell 内置到最新版本的 Windows 意味着您在这里的技能将始终有用,而无需先安装一些东西。

添加到 Select-String 的新参数:Select-String cmdlet 现在支持新参数,例如:

  • -Context:这允许您查看匹配行之前和之后的行
  • -AllMatches:允许您查看一行中的所有匹配项(以前,您只能看到一行中的第一个匹配项)
  • -NotMatch:等效于 grep -vo
  • -Encoding:指定字符编码

我发现为 . 创建一个函数gcirGet-ChildItem -Recurse .正确传递参数以及ssSelect-String. 所以你写:

gcir *.txt | ss 富

于 2008-09-17T20:42:04.300 回答
23

它可能不完全属于“grep”类别,但如果没有名为AgentRansack的实用程序,我无法在 Windows 上使用。它是一个基于 GUI 的“在文件中查找”实用程序,支持正则表达式。

右键单击文件夹,点击“ransack..”并找到包含您要查找的文件的文件非常简单。它也非常快。

于 2008-09-18T06:11:01.780 回答
19

BaregrepBaretail也不错)

于 2008-09-17T20:38:25.543 回答
17

我推荐AstroGrep

它是免费的、开源的,并且有一个简单的界面。我一直用它来搜索代码。

于 2010-08-13T15:06:53.603 回答
17

PowerShell 已被多次提及。以下是您实际以 grepish 方式使用它的方式:

Get-ChildItem -recurse -include *.txt | Select-String -CaseSensitive "SomeString"

它递归地搜索当前目录树中的所有文本文件,SomeString区分大小写。

更好的是,运行这个:

function pgrep { param([string]$search, [string]$inc) Get-ChildItem -recurse -include $inc | Select-String -CaseSensitive $search }

然后做:

pgrep SomeStringToSearch *.txt

然后为了真正让它变得神奇,将函数别名添加到您的PowerShell 配置文件中,您几乎可以减轻没有适当命令行工具的痛苦。

于 2011-03-11T22:07:59.143 回答
15

Windows 上的 Git = cmd.exe 中的 grep

我刚刚发现安装Git会给你一些基本的 Linux 命令:cat、grep、scp 和所有其他好的命令。

安装然后将 Git bin 文件夹添加到您的 PATH 中,然后您的 cmd.exe 具有基本的 Linux 功能!

http://code.google.com/p/msysgit/downloads/list?can=3

于 2012-01-16T14:22:08.680 回答
14

ack在 Windows 上运行良好(如果你有Perl)。我发现它在许多用途上都比 grep 好。

于 2008-09-17T20:38:15.950 回答
14

Cygwin包括 grep。如果你安装了 Cygwin,所有 GNU 工具和 Unix 的东西都可以在 Windows 上很好地工作。

于 2008-09-17T20:40:57.503 回答
13

dnGREP是一个开源的 Windows grep 工具。它支持许多很酷的功能,包括:

  • 撤消替换
  • 能够通过右键单击资源管理器中的文件夹进行搜索
  • 高级搜索选项,例如拼音搜索和 xpath
  • 在 PDF 文件、档案和 Word 文档中搜索

恕我直言,它也有一个漂亮而干净的界面:)

于 2011-05-17T18:28:34.383 回答
7

我总是使用WinGREP,但我遇到了不放手文件的问题。

于 2008-09-17T20:36:35.920 回答
7

好吧,除了GNU grep 的 Windows 端口之外,免费软件 Borland 的 Free C++ Compiler(它是一个带有命令行工具的免费软件)中还提供了 Borland 的 grep(与 GNU 非常相似)。

于 2008-09-17T21:17:26.680 回答
7

我已经成功地将GNU 实用程序用于 Win32有一段时间了,它有一个很好的 grep 以及tail和其他方便的 Win32 GNU 实用程序。我避免使用打包的 shell,直接在 Win32 命令提示符下使用可执行文件。

打包的tail也是一个不错的小应用。

于 2008-09-18T06:37:26.977 回答
6

我是Aba Search and Replace 的作者。就像 PowerGREP 一样,它支持正则表达式、保存模式以供进一步使用、撤消替换、预览 HTML/CSS/JS/PHP 的语法突出显示、不同的编码,包括 UTF-8 和 UTF-16。

与 PowerGREP 相比,GUI不那么杂乱。当您输入模式时,Aba 会立即开始搜索(增量搜索),因此您可以尝试使用正则表达式并立即查看结果。

欢迎您试用我的工具;我很乐意回答任何问题。

于 2011-12-12T03:32:12.153 回答
4

我想要一个适用于 Windows 的免费 grep 工具,它允许您右键单击文件夹并对每个文件进行正则表达式搜索 - 没有任何唠叨屏幕。

以下是基于上findstr一篇文章中提到的快速解决方案。

在硬盘驱动器上的某个位置创建一个文本文件,用于保存长期使用的工具。重命名为 .bat 或 .cmd 并将以下内容粘贴到其中:

@echo off
set /p term="Search term> "
del %temp%\grepresult.txt
findstr /i /S /R /n /C:"%term%" "%~1\*.*" > "%temp%\grepresult.txt"
start notepad "%temp%\grepresult.txt"

然后浏览到 SendTo 文件夹。在 Windows 7 上,浏览到%APPDATA%\Microsoft\Windows\SendTo批处理文件的快捷方式并将其拖动到该 SendTo 文件夹。

我重命名了快捷方式,1 GREP使其保持在 SendTo 列表的顶部。

接下来我想做的事情是将输出findstr通过管道输出,这些东西会生成一个 html 文件,以便您可以单击每个输出行来打开该文件。另外,我认为它不适用于文件夹的快捷方式。我必须检查参数,看看它是否包含“.lnk”。

于 2011-06-24T09:47:34.933 回答
3

UnxUtils是我使用的那个,它非常适合我......

于 2008-09-18T06:00:17.423 回答
3

我使用 Borland 的 grep 多年,但我只是发现了一个不匹配的模式。埃克斯。这些年来它还没有发现什么?我写了一个简单的文本搜索替换,它像 grep 一样进行递归 - 它是SourceForge 上的 FS.EXE 。

grep 失败...

C:\DEV> GREP GAAPRNTR \SOURCE\TPALIB\*.PRG
<no results>

Windows 的findstr工作...

C:\DEV> FINDSTR GAAPRNTR \SOURCE\TPALIB\*.PRG
\SOURCE\TPALIB\TPGAAUPD.PRG:ffSPOOL(cRPTFILE, MEM->GAAPRNTR, MEM->NETTYPE)
\SOURCE\TPALIB\TPPRINTR.PRG:    AADD(mPRINTER,   TPACONFG->GAAPRNTR)
\SOURCE\TPALIB\TPPRINTR.PRG:               IF TRIM(TPACONFG->GAAPRNTR) <> TRIM(mPRINTER[2])
\SOURCE\TPALIB\TPPRINTR.PRG:                   REPLACE TPACONFG->GAAPRNTR WITH mPRINTER[2]
于 2011-03-02T17:50:48.820 回答
3

我选择的工具是适当命名的 Windows Grep:

  • 漂亮的简单图形用户界面
  • 支持搜索和替换
  • 可以显示找到的线条周围的线条
  • 可以在 CSV 和固定宽度文件的列中搜索
于 2011-10-10T15:25:59.597 回答
2

PowerShell 的Select-String类似。它没有相同的选项和语义,但它仍然很强大。

于 2008-09-17T20:36:00.557 回答
2

另一个不错的选择是MSYS。它为您提供了许多其他 GNU 实用程序,让您更有效率。

于 2011-09-08T05:42:12.070 回答
1

如果您想要一个简单易用的 Windows Grep 工具,我创建了一个名为 P-Grep 的工具,可以从我的网站免费下载:www.adjutantit.com - 主菜单,下载。

Windows Grep 似乎有大量文件的问题,所以我自己写了 - 这似乎更可靠。您可以选择一个文件夹,右键单击并将其发送到 P-Grep。sendto 文件夹在安装过程中得到更新。

于 2011-09-07T00:16:33.313 回答
1

多年来,我每天都在使用AJC Grep 。我发现的唯一主要限制是文件路径限制为 255 个字符,并且在遇到一个字符时会停止,而不仅仅是发出警告。这很烦人,但并不经常发生。

我在 64 位 Windows 7 Ultimate 上使用它,所以它的 64 位凭据很好。

于 2011-12-21T11:57:28.667 回答
1

用于 Windows 的 GREP

我一直在使用它,幸运的是它仍然可用。它超级快而且非常小。

于 2012-01-05T23:02:02.673 回答
0

我在我的机器上安装了Cygwin并将 Cygwin bin 目录放在我的环境路径中,因此 Cygwin grep 在命令行中正常工作,这解决了我目前对 grep 的所有脚本需求。

于 2011-09-13T21:45:51.390 回答
0

如果没有一个解决方案是您正在寻找的,也许您可​​以为 FindStr编写一个包装器来满足您的需求?

FindStr 无论如何都很好,所以它应该只是打开一个 GUI(如果你想要的话)并提供一些额外的功能(比如将它与 Find 结合起来以查找包含指定字符串的文件的数量 [上面提到的])。

当然,这假设您有这样做的要求、时间和意愿!

于 2012-02-20T16:55:32.443 回答