提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:仅用于学习所用 参考了 https://www.liuvv.com/p/868944ef.html
- 说到文本搜索工具,大家一定会知道 grep, 它是 linux 最有用并最常用的工具之一。但如果在一个大的工程项目中搜索某个关键词,它会有些耗时。
- 出现了现在的新的替代者 Ripgrep 简称 rg
一、RG用法说明
- 功能 与 GNU Grep的功能类似
- RipGrep 是一个以行为单位的搜索工具, 它根据提供的(模式匹配) pattern 递归地在指定的目录里搜索。
- 它是由 Rust 语言写成,相较与同类工具,它的特点就是无与伦比地快。
- 使用手册
- 自动递归搜索 (grep 需要-R)
- 自动忽略.gitignore 中的文件以及二进制文件
- 可以搜索指定文件类型(rg -t py foo限定 python 文件, rg -T js foo排除 js 文件)
- 支持大部分 grep 的 feature(常用的都有)
- 支持各种文件编码(UTF-8, UTF-16, latin-1, GBK, EUC-JP, Shift_JIS 等等)
- 支持搜索常见压缩文件(gzip, xz, lzma, bzip2, lz4)
- 自动高亮匹配的结果
1.1 扩展阅读
- 还有更强的:比如现在的rga:ripgrep,能够搜索PDFs, E-books,Office documents, zip, tar.gz等等
- 参考: https://github.com/phiresky/ripgrep-all
二、基础使用
- cat a.txt, 我们以下面的文件为测试文件, 可以发现rg 和 grep 的选项大部分一样
test
a
b
c
d
e
f
g
test1
TEST2
- 我们先来一个最基础的搜索:
rg 'test' a.txt
1:test
9:test1
- -w有word之意,表示搜索的字符串作为一个独立的单词时才会被匹配到。
rg -w 'test' a.txt
1:test
- 使用-i选项,即可在搜索时不区分大小写
rg -i 'test' a.txt
1:test
9:test1
10:TEST2
- -l只打印有匹配的文件名
rg -l 'test' a.txt
a.txt
- -C 输出匹配上下几行的内容
rg -C 2 'c' a.txt
2-a
3-b
4:c
5-d
6-e
- 支持的文件类型可以通过 rg --type-list 查看
三、高阶使用
- 使用 -e REGEX 来指定正则表达是
rg -e "*sql" -C2
- 默认 rg 会忽略 .gitignore 和隐藏文件,可以使用 -uu 来查询所有内容
rg -uu "word" .
- 可以使用 -t type 来指定文件类型:
rg -t markdown "mysql" . # 在 md 文件中查找 “mysql” 关键字
三、搜索文件
- 列出当前文件夹会进行查询的所有文件, 该选项其实可相当于:find . -type f,查找当前目录所有文件
rg --files .
alias rgf='rg --files | rg' # 可来个别名
- 搜索以 md 为后缀的文件
rg --files . | rg -e ".md$" # 正则匹配
四、vim中使用
- 配合 fzf
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } "极限搜索文件
Plug 'junegunn/fzf.vim'
nnoremap <leader>fo :Files<CR>"映射
nnoremap <leader>fif :Rg<CR> "映射
总结:
- 对于Linux中常用命令rg的使用方法记录