对 Windows 的grep工具有什么建议吗?理想情况下,可以利用 64 位操作系统。
28 回答
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 *
根据评论中的建议,我开始使用grepWin,它很棒而且免费。
(我仍然是PowerGREP的粉丝,但我不再使用它了。)
我知道你已经提到过,但是 PowerGREP很棒。
我最喜欢的一些功能是:
- 右键单击文件夹以在其上运行 PowerGREP
- 使用正则表达式或文字文本
- 为要包含和排除的文件指定通配符
- 搜索和替换
- 预览模式很好,因为您可以确保您正在替换您打算替换的内容。
现在我意识到其他 grep 工具可以完成以上所有工作。只是 PowerGREP 将所有功能打包到一个非常易于使用的 GUI 中。
来自为您带来RegexBuddy的同样出色的人,而我与他们没有任何关系,只是喜欢他们的东西。(需要注意的是,RegexBuddy 本身包含一个基本版本的 grep(适用于 Windows),它的成本比 PowerGREP 低很多。)
其他解决方案
现有的 Windows 命令
Windows 上的 Linux 命令实现
具有图形界面的 Grep 工具
其他 Grep 工具
GrepWin是免费和开源的 (GPL)
我一直在使用由TortoiseSVN中的一个人编写的 grepWin。它在 Windows 上完成了这项工作......
2013 年 7 月更新:
我现在在 Windows 上一直使用的另一个 grep 工具是AstroGrep:
它向我展示的不仅仅是行搜索(即命令行 grep 的 --context=NUM)的能力是无价的。
而且速度很快。速度非常快,即使在没有SSD驱动器的旧计算机上也是如此(我知道,他们曾经用旋转磁盘来做这个硬盘驱动器,称为platters,很疯狂吧?)
这是免费的。
它是可移植的(简单的 zip 存档解压缩)。
原始答案 2008 年 10 月
Gnu Grep没问题
例如,您可以在此处下载它:(站点 ftp)
所有常用选项都在这里。
结合gawk和xargs(包括来自GnuWin32的 'find' ),你可以真正像在 Unix 上一样编写脚本!
另请参阅我用于递归 grep 的选项:
grep --include "*.xxx" -nRHI "my Text to grep" *
PowerShell 的Select-String cmdlet 在 v1.0 中很好,但在v2.0 中要好得多。将 PowerShell 内置到最新版本的 Windows 意味着您在这里的技能将始终有用,而无需先安装一些东西。
添加到 Select-String 的新参数:Select-String cmdlet 现在支持新参数,例如:
- -Context:这允许您查看匹配行之前和之后的行
- -AllMatches:允许您查看一行中的所有匹配项(以前,您只能看到一行中的第一个匹配项)
- -NotMatch:等效于 grep -vo
- -Encoding:指定字符编码
我发现为 . 创建一个函数gcir
、Get-ChildItem -Recurse .
正确传递参数以及ss
为Select-String
. 所以你写:
gcir *.txt | ss 富
它可能不完全属于“grep”类别,但如果没有名为AgentRansack的实用程序,我无法在 Windows 上使用。它是一个基于 GUI 的“在文件中查找”实用程序,支持正则表达式。
右键单击文件夹,点击“ransack..”并找到包含您要查找的文件的文件非常简单。它也非常快。
我推荐AstroGrep。
它是免费的、开源的,并且有一个简单的界面。我一直用它来搜索代码。
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 配置文件中,您几乎可以减轻没有适当命令行工具的痛苦。
Windows 上的 Git = cmd.exe 中的 grep
我刚刚发现安装Git会给你一些基本的 Linux 命令:cat、grep、scp 和所有其他好的命令。
安装然后将 Git bin 文件夹添加到您的 PATH 中,然后您的 cmd.exe 具有基本的 Linux 功能!
Cygwin包括 grep。如果你安装了 Cygwin,所有 GNU 工具和 Unix 的东西都可以在 Windows 上很好地工作。
dnGREP是一个开源的 Windows grep 工具。它支持许多很酷的功能,包括:
- 撤消替换
- 能够通过右键单击资源管理器中的文件夹进行搜索
- 高级搜索选项,例如拼音搜索和 xpath
- 在 PDF 文件、档案和 Word 文档中搜索
恕我直言,它也有一个漂亮而干净的界面:)
我总是使用WinGREP,但我遇到了不放手文件的问题。
好吧,除了GNU grep 的 Windows 端口之外,免费软件 Borland 的 Free C++ Compiler(它是一个带有命令行工具的免费软件)中还提供了 Borland 的 grep(与 GNU 非常相似)。
我已经成功地将GNU 实用程序用于 Win32有一段时间了,它有一个很好的 grep 以及tail和其他方便的 Win32 GNU 实用程序。我避免使用打包的 shell,直接在 Win32 命令提示符下使用可执行文件。
打包的tail也是一个不错的小应用。
我是Aba Search and Replace 的作者。就像 PowerGREP 一样,它支持正则表达式、保存模式以供进一步使用、撤消替换、预览 HTML/CSS/JS/PHP 的语法突出显示、不同的编码,包括 UTF-8 和 UTF-16。
与 PowerGREP 相比,GUI不那么杂乱。当您输入模式时,Aba 会立即开始搜索(增量搜索),因此您可以尝试使用正则表达式并立即查看结果。
欢迎您试用我的工具;我很乐意回答任何问题。
我想要一个适用于 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”。
UnxUtils是我使用的那个,它非常适合我......
我使用 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]
我选择的工具是适当命名的 Windows Grep:
- 漂亮的简单图形用户界面
- 支持搜索和替换
- 可以显示找到的线条周围的线条
- 可以在 CSV 和固定宽度文件的列中搜索
PowerShell 的Select-String类似。它没有相同的选项和语义,但它仍然很强大。
另一个不错的选择是MSYS。它为您提供了许多其他 GNU 实用程序,让您更有效率。
如果您想要一个简单易用的 Windows Grep 工具,我创建了一个名为 P-Grep 的工具,可以从我的网站免费下载:www.adjutantit.com - 主菜单,下载。
Windows Grep 似乎有大量文件的问题,所以我自己写了 - 这似乎更可靠。您可以选择一个文件夹,右键单击并将其发送到 P-Grep。sendto 文件夹在安装过程中得到更新。
多年来,我每天都在使用AJC Grep 。我发现的唯一主要限制是文件路径限制为 255 个字符,并且在遇到一个字符时会停止,而不仅仅是发出警告。这很烦人,但并不经常发生。
我在 64 位 Windows 7 Ultimate 上使用它,所以它的 64 位凭据很好。
我一直在使用它,幸运的是它仍然可用。它超级快而且非常小。
我在我的机器上安装了Cygwin并将 Cygwin bin 目录放在我的环境路径中,因此 Cygwin grep 在命令行中正常工作,这解决了我目前对 grep 的所有脚本需求。
如果没有一个解决方案是您正在寻找的,也许您可以为 FindStr编写一个包装器来满足您的需求?
FindStr 无论如何都很好,所以它应该只是打开一个 GUI(如果你想要的话)并提供一些额外的功能(比如将它与 Find 结合起来以查找包含指定字符串的文件的数量 [上面提到的])。
当然,这假设您有这样做的要求、时间和意愿!