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别忘了展开全部!
如果你不知道下载那个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
打开压缩包,只有一个rg.exe是有用的!
为了方便使用,将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
在命令行面板输入以下命令
安装成功则返回版本号,返回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
忽略大小写
搜索有病毒的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
|