什么是Windows的优秀grep工具?

时间:2008-09-17 20:34:48

标签: windows grep

有关Windows grep工具的任何建议?理想情况下可以利用64位操作系统。

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

28 个答案:

答案 0 :(得分:314)

FINDSTR相当强大,支持regular expressions,并且具有已经在所有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 *

答案 1 :(得分:187)

根据评论中的建议,我已经开始使用grepWin,这很精彩且免费


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

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

我最喜欢的一些功能是:

  • 右键单击文件夹以在其上运行PowerGREP
  • 使用正则表达式或文字文字
  • 为要包含的文件指定通配符&amp;排除
  • 搜索&amp;取代
  • 预览模式很不错,因为你可以确保你正在替换你想要的东西。

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

来自同样精彩的人们,他们带给你RegexBuddy我与他们没有任何关系,除了喜欢他们的东西。 (应该注意RegexBuddy包括grep(适用于Windows)本身的基本版本,它的成本远低于PowerGREP。)


其他解决方案

现有Windows命令

Windows上的Linux命令实现

带图形界面的Grep工具

其他Grep工具

答案 2 :(得分:104)

GrepWin 免费和开源(GPL)

enter image description here我一直在使用由一个tortoisesvn家伙写的grepWin。在Windows上工作......

http://stefanstools.sourceforge.net/grepWin.html

答案 3 :(得分:52)

2013年7月更新:

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

AstroGrep awesomeness

它能够向我展示的不仅仅是行搜索(即--context =命令行grep的NUM)是非常宝贵的。
它很快。非常快,即使在非SSD驱动器的旧计算机上(我知道,他们曾经使用旋转磁盘执行此硬盘驱动器,称为platters,这是疯了吗?)

这是免费的 它是便携式的(解压缩的简单zip存档)。


原始答案2008年10月

alt text Gnu Grep没问题

您可以在此处下载:(site ftp

所有usual options都在这里。

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

另请参阅options I am using to grep recursively

grep --include "*.xxx" -nRHI "my Text to grep" *

答案 4 :(得分:30)

PowerShell的Select-String cmdlet在v1.0中很好,但是significantly better for v2.0。将PowerShell内置到最新版本的Windows中意味着您的技能始终有用,无需先安装。

  

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

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

我觉得为gcir创建一个函数Get-ChildItem -Recurse .很方便,智能正确传递参数,ss的别名Select-String。所以你写一下:

  

gcir * .txt | ss foo

答案 5 :(得分:23)

它可能不完全属于'grep'类别,但如果没有名为AgentRansack的实用程序,我无法在Windows上使用它。它是一个基于gui的“在文件中查找”实用程序,具有正则表达式支持。右键单击文件夹,点击“搜索...”并查找包含您要查找的内容的文件非常简单。非常快。

答案 6 :(得分:19)

BaregrepBaretail也很好)

答案 7 :(得分:17)

你问这个问题已经有几年了,但我推荐AstroGrep(http://astrogrep.sourceforge.net)。

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

答案 8 :(得分:16)

已经多次提到过PowerShell。以下是以实际方式使用它的方式:

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 Profile,你几乎可以消除没有正确命令行工具的痛苦。

答案 9 :(得分:14)

Cygwin包括grep。如果你安装了Cygwin,所有的GNU工具和Unix的东西在Windows上运行得很好。

http://www.cygwin.com/

答案 10 :(得分:13)

Git on Windows = grep in cmd.exe

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

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

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

答案 11 :(得分:13)

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

答案 12 :(得分:10)

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

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

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

答案 13 :(得分:7)

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

答案 14 :(得分:7)

我已经成功使用GNU utilities for Win32很长一段时间了,它有一个很好的grep以及tail和win32的其他方便的gnu工具。我避免使用打包的shell,只需在win32命令提示符下使用可执行文件。

打包的Tail也是一个很好的小应用程序。

答案 15 :(得分:7)

好吧,在GNU grep的Windows端口旁边:

http://gnuwin32.sourceforge.net/

还有免费软件Borland的免费C ++编译器中提供的Borland的grep(非常类似于GNU)(它是一个带命令行工具的免费软件)。

答案 16 :(得分:6)

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

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

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

答案 17 :(得分: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”。

答案 18 :(得分:3)

我多年来一直使用Borland的grep,但只是找到了一个不匹配的模式。 Eeeks。多年来还发现了什么呢?我写了一个简单的文本搜索替换,它像grep一样进行递归 - 它是源伪造的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]

答案 19 :(得分:3)

UnxUtils是我使用的,对我来说非常适合......

答案 20 :(得分:3)

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

  • 很简单的GUI
  • 支持搜索和替换
  • 可以显示找到的行周围的行
  • 可以在CSV和固定宽度文件中的列内搜索

答案 21 :(得分:2)

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

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

答案 22 :(得分:2)

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

答案 23 :(得分:1)

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

我在64位Windows 7旗舰版上使用它,所以它的64位凭证很好。

答案 24 :(得分:1)

GREP for Windows

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

答案 25 :(得分:1)

PowerShell的select-string类似,它的选项和语义不同,但它仍然很强大。

答案 26 :(得分:0)

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

答案 27 :(得分:0)

如果所有的解决方案都不是你想要的,也许你可以写一个FindStr的包装器来完全满足你的要求吗?

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

当然,这假设您有这样的要求,时间和倾向!