阅读原文:https://einverne.github.io/post/2019/09/ripgrep-recursively-searches-directories-using-regex-pattern.html
ripgrep
(简称 rg),是一个用 Rust 实现的命令行搜索工具,可以通过正则来搜索当前的目录。默认情况下 ripgrep 会遵循 .gitignore
的内容,并且自动跳过隐藏的文件目录,以及二进制文件。 ripgrep 原生支持 Windows, MacOS, Linux。ripgrep 和其他流行的搜索工具非常相似,比如 The Silver Searcher
, ack
和 grep。
rg 的优势
目前 Linux 下可用的搜索工具非常多,GNU 中的 grep, ack-grep,The Silver Searcher 等等,而 rg
的优势在于快。
ripgrep
是真正的快,我在一个有 26G 代码的目录中查找一个方法也可以在几乎秒级的速度找到,所以我经常用来搜索不确定调用关系,但代码又分布在不同项目中时使用。ripgrep
遵循.gitignore
,在默认情况下会跳过二进制文件,隐藏的文件目录,不会追踪软链接,更进一步加快了速度。ripgrep
支持 Unicode,可以搜索压缩文件,还可以自己选择正则表达式匹配引擎,比如 PCRE2。
Installation
安装的内容直接参考官方页面 即可。
brew install ripgrep
Usage
来看看 rg 的通用格式
USAGE:
rg [OPTIONS] PATTERN [PATH ...]
rg [OPTIONS] [-e PATTERN ...] [PATH ...]
rg [OPTIONS] [-f PATTERNFILE ...] [PATH ...]
rg [OPTIONS] --files [PATH ...]
rg [OPTIONS] --type-list
command | rg [OPTIONS] PATTERN
最不用记忆的就是直接:
rg "keyword"
会显示当前目录下的搜索内容,会打印出文件名及关键字出现的行数。
和 grep 命令类似,也有三个打印出上下行的选项
-A NUM
打印匹配行后面 after N 行-B NUM
打印匹配行前面 before N 行-C NUM
打印匹配行前后 N 行
用正则表达式搜索
使用 -e REGEX
来指定正则表达式
rg -e "*sql" -C2
搜索所有内容包括 gitignore 和隐藏文件
默认 rg 会忽略 .gitignore
和隐藏文件,可以使用 -uu
来查询所有内容:
rg -uu "word" .
显示匹配的次数
使用 -c
来显示匹配的次数:
rg -c "word" .
结果会在文件名后面增加一个次数。
搜索指定的文件类型
可以使用 -t type
来指定文件类型:
rg -t markdown "mysql" .
查看支持的文件类型:
rg --type-list
看到这里,有些读者可能要问假如我要在两个文件类型中查找呢,这个时候 -t
参数就无法满足了,需要引入新的 -g
参数,man rg
看一下 -g
就知道该选项后面跟着一个 GLOB,正则表达式,包括或者去除一些文件或者目录。比如要在 md
文件或者 html
文件中查找 “mysql” 关键字:
rg -g "*.{md,html}" "mysql"
注意这里是花括号。
只打印包含匹配内容的文件名
使用 -l
来打印文件名
rg -l -w "word" .
相反的是如果要打印没有匹配内容的文件名
rg --files-without-match -w "word" .
启用大小写敏感
使用 -s
选项来启用大小写敏感
rg -s "word" .
使用 -i
来关闭大小写敏感。
显示不包含关键字的行
使用选项 -v
来显示不包含关键字的行
rg -v "word" .
搜索单词
添加 -w
参数仅显示该单词的内容,该选项等同于在搜索 Pattern 前后加上 \b
,这样可以避免因为模糊搜索而导致的不精确。
rg -w "myword" .
比如搜索 abc,可能有些单词包含 dabce ,那么也会被搜索出来,而加上 -w
就不会搜索出来了。
reference
有两个方法查看 rg 使用
man rg
tldr rg
- https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)