介绍
The Silver Searcher是一个代码快速搜索工具,命令是ag
。
可以自动忽略.gitignore
、.hgignore
文件中的设置。这对于芯片工程师和程序员来说是非常友好的,因为90%的项目都采用了git、svn、hg等版本管理工具。万一不兴没有采用版本管理工具,你一样可以手动建立一个.ignore
文件。
相比grep
,ag
的命令参数更简洁,且执行速度快N倍。快的原因是ag
利用了多核CPU,并行搜索。并且还有其它多项优化措施,如内存、正则等。
安装方法
1、如果电脑可以连网,可以直接通过dnf
、yum
、apt-get
等命令直接安装。
2、下载编译好的二进制文件:https://github.com/JFLarvoire/the_silver_searcher/releases
3、如果电脑不能连网,可以从github(https://github.com/JFLarvoire/the_silver_searcher)下载源码,编译安装。以centos为例:
yum install pcre-devel xz-devel zlib-devel
cd xxx
./build.sh
make
make install
4、RHEL7/Centos7的ag也可以从这里直接下载:ag2.1.0.tar.gz,解压后加path里即可使用。
使用方法
简单pattern模式
# 默认不需要加双引号,忽略大小写
ag output *.v
# 不忽略大小写用 -s
ag -s output *.v
# 当pattern中含大写字母,也会自动取消忽略大小写,下面的例子仅配置大写的OUTPUT
ag OUTPUT *.v
# 反向匹配
ag -v outout *.v
正则模式
# 仅配置output在一行末尾的情况
ag output$ *.v
# 为避免`\`被转义,pattern用双引号或单引号括起来
ag "^\s*Signal" *.v
# 同时搜多个关键字(处于不同行),以下正则找出所有端口定义行
ag "(input|output|inout)" *.v
其他常用option
# 包括.gitignore
ag -u output .
# 搜索软链接
ag -f output .
# 只显示匹配的文件名
ag -l output .
# 只显示不配置的文件名
ag -L output .
# 查找文件名,代替find . -name "xxx"
ag -g sdf .
# 显示每个文件内配置到多少次
ag -c output .
# 配置行前后多显示几行
ag -A 2 -B 3 output .
# 与find、xargs配合,只搜索sim.log
find . -name "sim.log" | xargs ag fail
# 把color关掉,也可以与xargs配合
ag --nocolor -g "/sim.log" | xargs ag fail
人气较高的同类工具
ack
:https://github.com/beyondgrep/ack3
ripgrep
:https://github.com/BurntSushi/ripgrep