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
显示没有任何匹配的文件名。