简介
rg
(ripgrep)是由 github.com/BurntSushi 用 Rust 开发的文本搜索工具 ,能作为 grep
命令的替代工具。它能递归搜索目录中所有文件的内容 并高亮 显示匹配项,支持正则表达式,提供 JSON 格式 的搜索结果,默认遵守 .gitignore
和 .ignore
文件规则,特别适用在代码库中查找特定文本。
快速上手
安装
sh
eval "$(curl https://get.x-cmd.com)" # 安装 x-cmd
x env use rg # 使用 x-cmd 安装 rg
使用
-
基本用法:
shrg <PATTERN> # 搜索与 PATTERN 匹配的文件内容(默认搜索当前目录)
-
控制搜索范围:
shrg <PATTERN> [path] # 指定搜索的目录或文件 rg <PATTERN> -i # 不区分大小写 rg <PATTERN> -g 'h*' # 仅符合条件的文件 rg <PATTERN> -tpy # 仅搜索指定类型的文件,如 python 代码文件 rg <PATTERN> -Tpy # 搜索时排除指定类型的文件,如 python 代码文件
-
控制输出结果的样式:
shrg <PATTERN> -C2 # 显示匹配项前后两行的内容 rg <PATTERN> --sort=path # 按文件路径排序(升序) rg <PATTERN> --sortr=path # 按文件路径排序(降序) rg <PATTERN> -l # 只打印包含匹配项的文件路径 rg <PATTERN> --files-without-match # 只打印不包含匹配项的文件路径 rg <PATTERN> -I -N # 只打印包含匹配项的行内容 rg <PATTERN> -r TEXT # 用给定的文本替换匹配项 rg <PATTERN> --json # 以 JSON 格式输出搜索结果
与第三方工具组合使用
-
搭配
bat
使用,如使用rg -p <PATTERN> | bat
命令分页查看搜索结果。 -
搭配
eza
使用,如使用rg -l 'Hello' | eza -l --stdin
命令搜索和查看文件内容中包含 Hello 字符串的文件。 -
搭配
fzf
使用,如制作一个简易的搜索预览器:shrfz() { rg -l "$@" | fzf --preview "rg -p $@ {}" } rfz <PATTERN>
功能特点
- 性能优越:rg 基于 rust 实现,采用了多线程处理。与同类工具相比,在搜索大目录和大文件时表现优越。详情请参考下文的进一步阅读。
- 友好的默认设置 :
- 遵循
.gitignore
文件以及其他常见的忽略文件,能自动排除不需要搜索的文件和目录。 - 用颜色突出显示匹配的文本,便于用户快速识别结果。
- 能递归搜索所有子目录,方便查找嵌套文件。
- 遵循
- 功能丰富:支持正则表达式、文件类型过滤、跨多行搜索、限制结果数量、排序等多种功能。
- 跨平台:支持主流操作系统,包括 Windows、Linux、MacOS。
竞品和相关项目
- grep:最常用的命令行文本搜索工具,可用于在文件中查找指定内容的文本行。它是 Unix 和类 Unix 操作系统的标准工具,通常与正则表达式一起使用来进行高级文本搜索。
- ack:专门设计用于代码搜索的工具。它默认会忽略版本控制目录和备份文件,并支持多种文件类型,通常用于搜索代码库中的文本,侧重于代码搜索。
- silver(The Silver Searcher):类似
ack
的代码搜索工具。它的主要特点是速度非常快,并使用了高度优化的算法进行搜索,特别适用于大型代码库或文本文件的搜索。
进一步阅读
- rg 源代码 - rg 项目的源代码托管在 GitHub,你可以在这里找到最新版本的 rg 和参与社区贡献。
- rg 与相关程序的比较 - 由 rg 官方给出的 rg 同类程序对比表格,可据此寻找像 rg 这样的程序。
- ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - rg 作者所作的文章,非常有深度。
- rg 手册页 - 提供关于 rg 命令行工具的详细信息,包括使用说明、命令选项、示例和其他相关内容。
更多内容请查阅 : pkg/rg
转载请标明原文链接 :www.x-cmd.com/pkg/rg
关注微信官方公众号 : oh my x
获取开源软件和 x-cmd 最新用法