可以通过 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 通知中心
只能找到那些一行中同时包含这两个词的文档,如果某个文档的这两个词位于不同的行,不会被搜中。
注意 |
和 $()
的区别。|
是指把前面的输出作为后面的输入去执行,而 $()
是把括号中的输出作为参数去执行,一个是作为另一个命令的输入,一个是作为另一个命令的参数。
相关文章: