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

article/2025/11/10 18:59:41

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

使用 ripgrep 的语法如下:

rg <pattern> [files/directories]

使用 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

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

emerge sys-apps/ripgrep

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

sudo dnf install ripgrep

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

sudo zypper install ripgrep

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

sudo apt install ripgrep

使用 ripgrep 命令

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

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

基本搜索

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

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

正如预期的那样,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

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

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

结论

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

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


http://chatgpt.dhexx.cn/article/ANsXmdKf.shtml

相关文章

Linux常用命令——grep(*)

grep 文本过滤工具 语法格式&#xff1a;grep 【options】【pattern】【file】 grep [参数] [匹配模式] [查找的文件] 注意&#xff1a; 1.grep 是 Linux 系统中最重要的命令之一&#xff0c;其功能是从文本文件或管道数据流中筛选匹配的行及数据。 2.grep 命令里的匹配模式或模…

Linux常用命令——grep

grep 文本过滤工具 语法格式:grep 【options】【pattern】【file】 grep [参数] [匹配模式] [查找的文件]注意:1.grep 是 Linux 系统中最重要的命令之一,其功能是从文本文件或管道数据流中筛选匹配的行及数据。2.grep 命令里的匹配模式或模式匹配,都是你要好找的东西,可以…

【Linux】grep 命令详解

文章目录 一、grep常用命令1、语法2、范例 二、grep的一些高级参数1、语法2、范例 三、基础正则表达式练习1、与中括号 [] 结合2、与反向选择^结合使用3、与行首 ^ 和行尾 $ 字符结合4、任意一个字符 . 与重复字符 * 5、 {} 限定连续字符范围 一、grep常用命令 grep的功能是分…

【WINDOWS / DOS 批处理】for命令详解(八)

for命令详解&#xff08;一&#xff09;【共十篇】 for命令详解&#xff08;二&#xff09;【共十篇】 for命令详解&#xff08;三&#xff09;【共十篇】 for命令详解&#xff08;四&#xff09;【共十篇】 for命令详解&#xff08;五&#xff09;【共十篇】 fo…

【WINDOWS / DOS 批处理】for命令详解(一)

for命令详解&#xff08;一&#xff09;【共十篇】 for命令详解&#xff08;二&#xff09;【共十篇】 for命令详解&#xff08;三&#xff09;【共十篇】 for命令详解&#xff08;四&#xff09;【共十篇】 for命令详解&#xff08;五&#xff09;【共十篇】 fo…

批处理 bat for 详解

一、前言 在批处理中&#xff0c;for是最为强大的命令语句&#xff0c;它的出现&#xff0c;使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能&#xff1b;配合if、call、 goto等流程控制语句&#xff0c;更是可以实现脚本复杂的自动化、智能化操作&#xff1b;合…

批处理for循环命令初步学习

1 基本格式 DOS批处理for循环语句的基本格式是&#xff0c; for /参数 %变量 in (集) do 命令 参数&#xff1a;FOR分四种参数 D L R F&#xff1b; 变量&#xff1a;变量名是由单个字母组成且区分大小写&#xff08;原帮助是这么说的&#xff0c;实际运用中用单个数字作为…

BAT批处理文件 for命令详解

Windows bat脚本的for语句基本形态如下&#xff1a; 在cmd窗口中&#xff1a;for %I in (command1) do command2 在批处理文件中&#xff1a;for %%I in (command1) do command2之所以要区分cmd窗口和批处理文件两种环境&#xff0c;是因为在这两种环境下&#xff0c;命令语句…

jenkins配置中执行 ant 命令时,提示找不到ant 命令

1.在服务器上手动执行ant &#xff0c;则可以正常执行&#xff0c;但是使用jenkins 构建时却提示无法识别ant命令 查询了相关原因为&#xff1a;jenkins默认情况下执行shell脚本是使用非登录方式&#xff0c;然而非登录方式不会加载 /etc/profile 文件&#xff0c;且ant_home 此…

Ant的使用简介

Ant的使用简介 1、Ant简介 ApacheAnt是一个基于Java的构建工具。是一个将软件编译、测试、部署等步骤想结合并加以自动化的一个工具&#xff0c;大多用于Java环境中的软件开发。目前主要的Java ide都带有Ant&#xff0c;产品如Eclipse、NetBeans和IntelliJ IDEA。 理论上&…

openfire运行ant命令控制台中文乱码问题

最近项目要使用openfire来进行插件开发&#xff0c;下载openfire源码导入工程后&#xff0c;运行源码的build目录下的build.xml中的ant命令&#xff0c;其中run命令是启动openfire服务器&#xff0c;结果控制台输出乱码&#xff0c;如图所示&#xff1a; run命令的原始ant脚本是…

使用Ant打包工具

由于使用java&#xff0c;javac&#xff0c;jar等工具进行编译打包&#xff0c;即繁琐低效又容易出错&#xff0c;因此Ant出现了。Ant的出现就是专门为了打包编译java代码的&#xff0c;使用之前得稍微学一下。Ant的运行起来主要是依靠配置文件(XML格式)&#xff0c;通常命名为…

ant命令征集详解

ANT指令build.xml命令集 1.ANT示例1.0(将指定路径下的文件复制到指定的其他位置) <?xml version"1.0" encoding"UTF-8" ?> <project name"antTest" default"compile" basedir"."><target name"clean…

Ant企业使用(二)------ant命令及使用

上节说到ant的部署安装&#xff0c;下面呢咱们开始介绍下ant命令以及使用&#xff1a;一.ant命令 语法元素说明如下&#xff1a; -help 显示描述ant 命令及其选项的帮助信息 -projecthelp 显 示包含在构建文件中的、所有用户编写的帮助文档。即为各个中description 属性的文…

简单的Ant命令

使用Ant打印一句话 1.最简单的打印方法 新建build.xml文件&#xff0c;在该文件输入一下内容&#xff1a; <project default"main target" name"first project"> <target name"main target"><echo>this is my firt ant pri…

ant使用总结(二):相关命令说明

在ant安装目录的manual目录是ant的说明文档&#xff0c;打开index.xml&#xff0c;点击Using Apache ant有使用说明。 相关命令说明 指定配置文件 执行ant命令&#xff0c;默认使用当前目录下的build.xml&#xff0c;可以通过-f指定配置文件。 示例&#xff1a;ant -f 配置文件…

DatabaseMetaData 获取数据表字段注释内容

使用DataBaseMetaData获取mysql表字段注释 DatabaseMetaData metaData connection.getMetaData(); ResultSet rs null; rs metaData.getColumns(dbName, null, tableName, "%");while (rs.next()) { QueryColumn columnnew QueryColumn(rs.getString…

Spring boot项目中DatabaseMetaData方式获取表字段信息

日常工作中我们可能会遇到一些配置化的功能&#xff0c;比如我们需要根据元数据项动态生成一些模板&#xff0c;比如表格&#xff0c;excel等&#xff0c;这些都需要我获取到数据库表中字段长度、类型、格式等信息。下面就以一个小白的身份和大家分享下自己的实现过程。 背景 …

Java中DataBaseMetaData与ResultMetaData基本使用

java中的DataBaseMetaData与ResultMetaData使用&#xff1a; DataBaseMetaData 类对象通过Connection类对象获取 1&#xff0c; 获取数据库的url 2&#xff0c; 获取用户名 3&#xff0c; 获取有哪些数据库 package com.xzq.jdbc;import com.xzq.dbutils.DbUitl;import java.s…

DatabaseMetaData.getIndexInfo

示例 通过 DatabaseMetaData.getIndexInfo&#xff08;&#xff09; 获取索引信息。 public static void getIndexInfo() throws Exception {Connection conn getConnection();ResultSet rs null;try {DatabaseMetaData dbmd conn.getMetaData();rs dbmd.getIndexInfo(&q…