程序员的七种武器之Ag

github: the_silver_searcher 比ack快的终端文件内容搜索工具 当你打开终端,面对一个很大很复杂的工程,想去找一个函数的定义或者调用,ag就能帮上忙

ag vs ack

A code searching tool similar to ack, with a focus on speed.

Help

ag --help

Usage

ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]

ag [FILE-TYPE] [OPTIONS] PATTERN [PATH] FILE-TYPE 如果忽略,ag会搜索它支持的所有文件类型(按后缀名) PATH可以是dir,也可以是filename, 如果忽略,就会搜索当前路径下的所有支持的文件

查看支持的文件类型

ag --list-file-types

Examples

搜索所有lua脚本

方式1:
ag --lua search_pattern
方式2:
ag -G .lua search_pattern

-G 选项是搜索文件名匹配某些pattern的文件的 此处.lua,是匹配文件名中包含.lua 的所有文件

搜索版本控制系统忽略的文件

ag 搜索时,默认忽略了 .gitignore .hgignore .svnignore等版本控制系统所指定 的忽略的文件,如果想搜索那里面的内容,需要用到 -U选项

ag -U some_pattern

使用正则搜索

ag正则搜索使用的是PCRE's JIT compiler, 兼容perl 的正则表达式

正则的使用内容有很多,要真正展开讲的话需要单独的篇幅,这里只举一两个简单的例子

搜索单词
ag "\bword\b"  #搜索单词
正则分组匹配
ag "(\bkey_word\b):\1:\1" 

支持分组搜索, 匹配keyword:keyword:keyword