如何在 Linux 中使用 ripgrep (rg) 命令?

举报
wljslmz 发表于 2022/07/27 22:40:36 2022/07/27
【摘要】 ripgrep是开源社区正在进行的 RIIR(用 Rust 重写)努力的一个优秀成果。,它旨在成为经典grep 命令的高级替代品。 使用 ripgrep 的语法如下: rg <pattern&g...

ripgrep是开源社区正在进行的 RIIR(用 Rust 重写)努力的一个优秀成果。,它旨在成为经典grep 命令的高级替代品。

使用 ripgrep 的语法如下:

rg <pattern> [files/directories]

  
 
  • 1

使用 ripgrep,无需提及文件名。如果未提供文件名,则搜索所有文件,如果您不知道哪个文件包含您搜索的模式,这将非常有用。

您也可以使用 grep 搜索所有文件,但 ripgrep 无需任何额外努力即可完成。

什么是 ripgrep?

ripgrep是一个递归正则表达式模式匹配工具,它考虑你的 gitignore,如果您的 gitignore 中有特定的文件、扩展名或目录,ripgrep 将忽略它们,从而加快执行时间。

使 ripgrep 脱颖而出的一些功能如下:

  • 在目录中递归搜索模式
  • 输出中的颜色突出显示
  • 支持多种编码格式,如 UTF-8、SHIFT_JIS
  • 能够在压缩的 zip 文件中进行搜索
  • 默认情况下忽略隐藏文件并使用您的 gitignore 文件进行更快的搜索

您可以将其视为 grep,但主要用于搜索文件/文件内容,而不是 grep 处理的原始字节流。

安装 ripgrep

虽然 grep 预装在大多数 Linux 系统上,但 ripgrep 没有该权限。

但是,它在所有主要 Linux 发行版的存储库中都可用,您可以使用包管理器来安装它。

如果您是 Arch Linux 的用户,您已经知道如何安装软件包 :p,但仍然是您应该使用的命令:

pacman -S ripgrep

  
 
  • 1

Gentoo 用户可以使用以下命令安装 ripgrep:

emerge sys-apps/ripgrep

  
 
  • 1

如果您使用 Fedora 或 Red Hat,请在终端中输入以下命令时稍加注意:

sudo dnf install ripgrep

  
 
  • 1

openSUSE 用户(15.1 和更高版本)应该在他们的终端中使用以下命令:

sudo zypper install ripgrep

  
 
  • 1

对于使用 Debian Buster (v10) 或更高版本的用户,请使用 apt。Ubuntu Cosmic Cuttlefish (18.10) 或更高版本也可以使用该发行版的官方存储库。

sudo apt install ripgrep

  
 
  • 1

使用 ripgrep 命令

如果您熟悉grep 命令用法,您会发现 ripgrep 的工作方式类似。您向它提供搜索字符串和文件名,它将搜索文件并显示输入字符串与文件内容匹配的位置。

对于本教程,我已经克隆了灰尘项目的存储库,我将在克隆的存储库中执行命令。

基本搜索

Cargo.html 文件中单词描述的示例搜索:

$ rg description Cargo.toml
3:description = "A more intuitive version of du"
53:extended-description = """\

  
 
  • 1
  • 2
  • 3

正如预期的那样,ripgrep 工具在我指定的文件中搜索并显示具有匹配文本和行号的文件。

如果您指定要搜索的多个文件(如果您不指定任何文件,它将搜索所有文件),ripgrep 还将确定其内容匹配的文件名。

或者,您也可以使用“–file”选项,其中包含您要匹配的模式。当您定期搜索要匹配的一组模式时,您可以将其存储在一个文件中并使用“–file”选项指定它。

上下文搜索

有时,拥有匹配行的上下文会很好,尤其是在代码存储库中搜索时。‘-C’ 或 ‘–context’ 选项在这里有帮助。此选项接受一个数值并显示匹配前后的行。

有时您可能只想查看上面的几行,包括匹配的行。有时,您只需要下面的行,包括匹配的行。

您可以使用选项“-A”、“–after-context”的缩写和一个数值来显示每次匹配后的行。

对于每次匹配之前的行,您可以使用选项“-B”,“–before-context”的缩写,以及一个数值。

ripgrep 提供的列有几个选项。

如果您是 vim 用户,您会喜欢 ‘–column’ 标志。它打印文件中匹配文本的“行:列”。

与列相关的另一个选项是“-M”或“–max-columns”,它采用数值表示最大列数。如果匹配行的列数超过,它将让您知道某个特定的行被省略而无法输出到终端。

杂项

有几个选项可以与 ripgrep 一起使用。

您可以使用“-s”或“–case-sensitive”选项来匹配区分大小写的文本。

如果要保持不区分大小写,可以使用“-i”或“–ignore-case”标志。

如果你有一个庞大的代码库,你可以使用多个线程进行模式匹配。您可以使用“-j”或“–threads”选项手动指定线程;它接受一个数值。

$ rg -j 4 TODO

  
 
  • 1

有时您想从搜索结果中排除某个模式。为此,您可以使用“-v”或“–invert-match”来排除指定的模式。

ripgrep 可以使用 ‘-z’ 或 ‘–search-zip’ 标志在压缩存档中搜索文本(如果压缩文件是文本文件)。该标志通常伴随着将二进制文件视为文本文件的“-a”标志。

结论

ripgrep 是一个非常棒的工具,您可以使用它,尤其是作为类 UNIX 环境中的程序员。

ripgrep,即使名称可能暗示其他方式,也不是要替换 grep,因为它的行为不同。但是这两种工具都很有用,这取决于您的用例。

文章来源: blog.csdn.net,作者:wljslmz,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43025343/article/details/124519744

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。