ripgrep

ripgrep 是一个以行为单位的搜索工具, 它根据提供的 pattern 递归地在指定的目录里搜索。它是由 Rust 语言写成,相较与同类工具,它的特点就是无与伦比地快。

性能有多强大可以看一下作者提供的几个常见的搜索工具对比  去看看>

下面说正事

Github开源地址:https://github.com/BurntSushi/ripgrep

中文帮助:https://github.com/chinanf-boy/ripgrep-zh

Github最新版本:

 

安装

由于没有使用过MaCOS 和 Linux

我将安装到Windows上面进行使用

从Vs Code中使用

如果你安装了Vs Code(Visual Studio Code)( 如果你想安装VsCode  去看看  >

则在Vs Code安装目录下的\resources\app\node_modules.asar.unpacked@vscode\ripgrep\bin目录下有ripgrep(rg.exe)

我将Vs Code默认安装到了C盘,我的完整目录如下:

1
C:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\resources\app\node_modules.asar.unpacked\@vscode\ripgrep\bin

将以上目录添加到环境变量的Path里面即可使用!

从Github下载安装

第一步,下载

如果没有找到Windows别忘了展开全部!

image-20240519182517532

如果你不知道下载那个Windws版本

windows-gnu.zip windows-msvc.zip
编译器 GCC MSVC
兼容性 更广泛的 Windows 系统 需要 VCRedist
速度 略慢 略快

如果你看不懂以上表格,则下载windows-msvc.zip即可

至于.sha256是哈希值校验

我这里直接下载ripgrep-14.1.0-x86_64-pc-windows-msvc.zip

image-20240519183509400

打开压缩包,只有一个rg.exe是有用的!

image-20240519183828626

为了方便使用,将rg可以放在任意一个目录,然后将这个目录添加到环境变量的Path里面

假如我将rg.exe放在了C:\Program Files\ripgrep\

也就是将C:\Program Files\ripgrep\这个目录添加到Path的列表中

如果你不会,那么就让度娘来帮你:https://jingyan.baidu.com/article/8ebacdf02d3c2949f65cd5d0.html

这一步完成就意味着你随时随地可以使用ripgrep了!

使用

先检查一下ripgrep是否安装成功,Win+R 运行cmd

在命令行面板输入以下命令

1
rg --version

安装成功则返回版本号,返回ripgrep 14.1.0 (rev e50df40a19),也就是当前版本为14.1.0,安装好了。

1
2
3
4
5
6
7
8
9
10
C:\Users\Administrator>rg --version
ripgrep 14.1.0 (rev e50df40a19)

features:-simd-accel,+pcre2
simd(compile):+SSE2,-SSSE3,-AVX2
simd(runtime):+SSE2,+SSSE3,+AVX2

PCRE2 10.42 is available (JIT is available)

C:\Users\Administrator>

rg -h 可以得到简短的帮助!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
ripgrep 14.1.0(修订版 e50df40a19)
Andrew Gallant <jamslam@gmail.com>

ripgrep(rg)递归搜索当前目录中与正则表达式模式匹配的行。默认情况下,ripgrep 将遵循 gitignore 规则,并自动跳过隐藏文件/目录和二进制文件。

使用 -h 获取简短描述,使用 --help 获取更多详细信息。

项目主页:https://github.com/BurntSushi/ripgrep

用法:
rg [选项] 模式 [路径...]

位置参数:
<PATTERN> 用于搜索的正则表达式。
<PATH>... 要搜索的文件或目录。

输入选项:
-e,--regexp=PATTERN 搜索的模式。
-f,--file=PATTERNFILE 从给定文件中搜索模式。
--pre=COMMAND 对每个路径搜索 COMMAND 的输出。
--pre-glob=GLOB 包含或排除预处理器的文件。
-z,--search-zip 在压缩文件中搜索。

搜索选项:
-s,--case-sensitive 区分大小写地搜索(默认)。
--crlf 使用 CRLF 行终止符(适用于 Windows)。
--dfa-size-limit=NUM 正则表达式 DFA 的上限大小。
-E,--encoding=ENCODING 指定要搜索的文件的文本编码。
--engine=ENGINE 指定要使用的正则表达式引擎。
-F,--fixed-strings 将所有模式视为字面量。
-i,--ignore-case 不区分大小写搜索。
-v,--invert-match 反转匹配。
-x,--line-regexp 显示由行边界包围的匹配项。
-m,--max-count=NUM 限制匹配行数。
--mmap 尽可能使用内存映射进行搜索。
-U,--multiline 启用跨多行的搜索。
--multiline-dotall 使 '.' 匹配行终止符。
--no-unicode 禁用 Unicode 模式。
--null-data 使用 NUL 作为行终止符。
-P,--pcre2 启用 PCRE2 匹配。
--regex-size-limit=NUM 编译后的正则表达式大小限制。
-S,--smart-case 智能大小写搜索。
--stop-on-nonmatch 在非匹配后停止搜索。
-a,--text 将二进制文件视为文本搜索。
-j,--threads=NUM 设置要使用的线程数。
-w,--word-regexp 显示由单词边界包围的匹配项。
--auto-hybrid-regex(已弃用)根据需要使用 PCRE2。
--no-pcre2-unicode(已弃用)禁用 PCRE2 的 Unicode 模式。

过滤选项:
--binary 搜索二进制文件。
-L,--follow 跟随符号链接。
-g,--glob=GLOB 包含或排除文件路径。
--glob-case-insensitive 对所有 glob 模式进行大小写不敏感处理。
-., --hidden 搜索隐藏文件和目录。
--iglob=GLOB 大小写不敏感地包含/排除路径。
--ignore-file=PATH 指定额外的忽略文件。
--ignore-file-case-insensitive 对忽略文件进行大小写不敏感处理。
-d,--max-depth=NUM 最多遍历 NUM 个目录。
--max-filesize=NUM 忽略大小大于 NUM 的文件。
--no-ignore 不使用忽略文件。
--no-ignore-dot 不使用 .ignore 或 .rgignore 文件。
--no-ignore-exclude 不使用本地排除文件。
--no-ignore-files 不使用 --ignore-file 参数。
--no-ignore-global 不使用全局忽略文件。
--no-ignore-parent 不使用父目录中的忽略文件。
--no-ignore-vcs 不使用源代码控制的忽略文件。
--no-require-git 在 git 存储库之外使用 .gitignore。
--one-file-system 跳过其他文件系统上的目录。
-t,--type=TYPE 仅搜索匹配 TYPE 的文件。
-T,--type-not=TYPE 不搜索匹配 TYPE 的文件。
--type-add=TYPESPEC 为文件类型添加新的 glob。
--type-clear=TYPE 清除文件类型的 glob。
-u,--unrestricted 降低“智能”过滤的级别。

输出选项:
-A,--after-context=NUM 显示每个匹配项后的 NUM 行。
-B,--before-context=NUM 显示每个匹配项前的 NUM 行。
--block-buffered 强制使用块缓冲。
-b,--byte-offset 打印每个匹配行的字节偏移量。
--color=WHEN 何时使用颜色。
--colors=COLOR_SPEC 配置颜色设置和样式。
--column 显示列号。
-C,--context=NUM 显示每个匹配项前后的 NUM 行。
--context-separator=SEP 设置上下文块的分隔符。
--field-context-separator=SEP 设置字段上下文分隔符。
--field-match-separator=SEP 设置字段匹配分隔符。
--heading 按每个文件分组打印匹配项。
-h,--help 显示帮助输出。
--hostname-bin=COMMAND 运行程序获取此系统的主机名。
--hyperlink-format=FORMAT 设置超链接的格式。
--include-zero 在摘要输出中包含零匹配。
--line-buffered 强制使用行缓冲。
-n,--line-number 显示行号。
-N,--no-line-number 不打印行号。
-M,--max-columns=NUM 忽略长度超过此限制的行。
--max-columns-preview 显示超过限制的行的预览。
-0,--null 在文件路径后打印一个 NUL 字节。
-o,--only-matching 仅打印行的匹配部分。
--path-separator=SEP 设置打印路径的路径分隔符。
--passthru 打印匹配和非匹配行。
-p,--pretty 颜色、标题和行号的别名。
-q,--quiet 不向标准输出打印任何内容。
-r,--replace=TEXT 用给定文本替换匹配

关键字搜索:

搜索D盘所有二进制文件内容包含Hello关键字的文件并列举出来

-l  告诉 ripgrep 只输出匹配的文件路径,而不显示匹配的内容。

"Hello" 关键字:Hello

"D:" 路径D盘

-i 忽略大小写

1
rg -l "Hello" "D:" -i

搜索有病毒的Maya文件

关键字vaccine  fuckVirus  “|”为连接符

搜索路径为  D:\work

-g “.ma” -g “.mb”  仅搜索ma和mb格式文件

-i  不区分大小写

> D:\results.txt   将搜索结果保存到D:\results.txt

1
rg -l "vaccine|fuckVirus" "D:\work" -g "*.ma" -g "*.mb" -i > D:\results.txt

更新:2024年6月6日20:59:40

我发现原来的命令行不能搜索到.mb文件,因为mb文件不是文本编码格式,rg会忽略掉mb文件,我们可以加一个 -a ,这样就可以搜索到mb文件了!

查看上面的帮助我们可以得知

-a,–text 将二进制文件视为文本搜索。

1
rg -l "vaccine|fuckVirus" "D:\work" -a -g "*.ma" -g "*.mb" -i > D:\results.txt