the silver searcher:快如闪电的 grep

UNIX/Linux 系统有不少好用的工具,用于文本搜索的 grep 或许是其中最常用的工具之一。尽管平时称心如意,在面对数百万行的代码库时,grep 的用户体验实在堪忧。还好,我们有 the silver searcher (即 ag)这样迅捷的替代品,从此再也不必经历漫长的等待了。我建议,在日常操作中,可以用 ag 完全取代 grep

下面来介绍 the silver searcher 的安装和使用方法。


安装

the silver searcher 在各大平台上都可以从软件库直接安装。除了 Debian/Ubuntu 外,其他系统使用的包名都是一样的。

MacOS:

1
brew install the_silver_searcher

Debian/Ubuntu:

1
sudo apt-get install silversearcher-ag

CentOS:

1
sudo yum install the_silver_searcher

Fedora:

1
sudo dnf install the_silver_searcher

ArchLinux:

1
sudo pacman -S the_silver_searcher

安装后,系统会新增一个 ag 指令来使用 the silver searcher。作者应该是看穿了人类懒惰的本性,选取了一个比 grep 更短的名字。


使用

关于文本搜索,最常见的用法是:

1
ag "string-to-search"

此时 ag 会遍历当前目录下的文本文件,在每个文件的每一行中查找 "string-to-search" 这种模式,把文件名、行号和匹配的内容高亮显示出来。由于模式可以是一个正则表达式,使得搜索功能极为强大。

如果想在某个指定的目录下搜索,或只搜索某个文件的内容,在搜索的字符串后面加上路径就行:

1
ag "string-to-search" /path/to/directory

除此以外,ag -G 提供了强大的过滤功能,使搜索在特定的文件中进行。下面的例子只搜索 java 类型的文件:

1
ag -G ".+\.java" "string-to-search" /path/to/directory

ag 根据输入智能判定大小写的匹配方式。如果查询的字符串只含有小写字符,使用大小写不敏感的匹配方式;如果出现了大写字符,就改为大小写敏感的匹配方式。如果想要直接使用不敏感的匹配方式,请用 ag -i 选项。

另一个很有用的选项是 ag -w 的全词匹配,它要求匹配的字符串前后都需要有合适的分隔符。

如果想要搜索不满足特定模式的行,用 ag -v 对搜索结果取反。

最后,如果只关心有哪些文件匹配(而不在意文件的内容),可以用 ag -l 显示有匹配的文件名,类似的 ag -L 显示没有任何匹配的文件名。