logo科技微讯

文档搜索 ripgrep 如何使用

作者:科技微讯
日期:2021-05-04
📝 笔记

可以通过 rg -h 查看文档。

最简单的用法是 rg 要搜索的关键词 文件路径

rg fast README.md

支持 regex 搜索,regex 需要用引号括起来:

rg 'fast\w+' README.md

支持搜索文件夹,这是 rg 的默认工作模式,所以如果是搜索当前文件夹,甚至不需要加文件夹路径:

rg fast

rg 在搜索文件夹时,会自动忽略 .gitignore 中的文件、隐藏的文件、Binary 文件等,当然也可以通过传入参数让它搜索这些文件。

或者可以限定它搜索指定的文件类型:

rg fast -g '*.md'
rg fast -g '*.{md,js}'
rg fast -g '!*.{md,js}'
  • 只列出文件名:-l
  • 跨行搜索:-U
  • 忽略大小写:-i

可以创建一个 ~/.ripgreprc 文件,在里面添加 flags,然后每次 rg 会自动用这些 flag 进行搜索。添加了这个文件之后还不行,还要设置一个 RIPGREP_CONFIG_PATH 环境变量,我在 macOS 用 zsh 这个 bash 程序,所以需要在 ~/.zshrc 这个文件添加 export RIPGREP_CONFIG_PATH=~/.ripgreprc 这一行,然后在终端输入 env 确认是否正确添加了这个环境变量。

需要注意的是,ripgrep 是一个 line-oriented 的搜索工具,如果你的目的是搜索所有同时包含“科技微讯”、“通知中心”两个词语的文档,需要这样

rg 科技微讯 $(rg -l 通知中心)

-l 表示只输出文档路径,$() 表示把括号里输出的值作为参数。

如果要搜索同时包含三个关键词的文档,可以再嵌套一层 $()

rg foobar $(rg -l 科技微讯 $(rg -l 通知中心))

由于 ripgrep 是 line-oriented 的,所以通过 pipe 命令搜索,例如 rg 科技微讯 | rg 通知中心 只能找到那些一行中同时包含这两个词的文档,如果某个文档的这两个词位于不同的行,不会被搜中。

注意 |$() 的区别。| 是指把前面的输出作为后面的输入去执行,而 $() 是把括号中的输出作为参数去执行,一个是作为另一个命令的输入,一个是作为另一个命令的参数。


相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论