过去十年来的喜悦之一是Unix的普及,而它最有用的工具之一就是grep。即使你’重新使用IDE进行开发时,很有可能您’学习此命令行工具后,将能够更快,更灵活地搜索代码。它’虽然并不总是很明显如何获得所有功能,所以我’向您展示一些我最喜欢的技术。示例已在OS X上进行了测试’GNU grep,但应适用于大多数版本。你可以下载 西格温 如果要在Windows上运行此工具和其他Unix工具。

grep -inIEr–color=ALWAYS “Foo.*=”源/代码/目录/

这是我最常使用grep的方式,首先在这里’这些神秘选项的含义。小写“i”表示搜索将不区分大小写,并且“n”要求工具在每个匹配项旁边打印行号。大“I”意味着grep使用一些令人印象深刻的猜测来找出哪些文件是二进制文件而不是文本文件,并跳过与之匹配的文件。大写“E”告诉工具将模式视为 Posix扩展正则表达式,因为basic的默认表达方式非常有限。最后下“r”准备该工具以查看您指定的主目录中的所有文件和子文件夹。最后一个选项开关使结果行的匹配部分以彩色突出显示。

第三个参数是您要匹配的模式,这里唯一需要注意的问题是,您需要将其用单引号或双引号引起来,以确保不会将任何字符误解为shell命令。学习正则表达式可能会令人生畏,但要知道“.”匹配任何单个字符并“.*”匹配零个或多个任何字符都可以使您惊奇得多。最后一个参数是包含源代码的目录。这里’s an example:

结果是源代码文件中所有匹配的行,文件名和行号在每行的开头。在OS X上,您可以通过将文件名剪切并粘贴到 打开 命令,例如

打开maprender / src / maprender.mxml

语境

有时只看到一行’足够的上下文来了解它是否’s a match you’对...感兴趣’s where the -C 选项派上用场。您可以指定要在比赛之前和之后显示的行数,这使您更像是搜索结果针对每个结果显示的网页摘要:

grep -inIEr–color=ALWAYS -C1 “Foo.*=”源/代码/目录/

文件类型

通常,您希望将搜索范围缩小到以特定语言编写的文件,而这正是您需要的 –include 选项。您指定了另一个模式(令人困惑的是’s a 球状 (不是完整的正则表达式),并且仅搜索名称与其匹配的文件。

grep -inIEr–color=ALWAYS –include=”*.php” “Foo.*=”源/代码/目录/

告诉我更多!

这只是您使用grep可以做的事情的表面,所以这里’进一步阅读:

GNU Grep手册

出色的Grep教程

Grep的五个简单食谱