Linux rg命令

参考资料

  1. grep と rg を並行して学ぶ

目录

  • [一. 简介](#一. 简介)
  • [二. 和grep相同的配置项](#二. 和grep相同的配置项)
  • [三. 特有的配置项](#三. 特有的配置项)
    • [3.1 `--no-heading`](#3.1 --no-heading)
    • [3.2 `--no-line-number`](#3.2 --no-line-number)
    • [3.3 `-t`](#3.3 -t)
    • [3.4 `-g`](#3.4 -g)
    • [3.5 `--files`](#3.5 --files)
    • [3.6 `-z` ⇔ `--search-zip`](#3.6 -z--search-zip)
  • [四. 注意事项](#四. 注意事项)
    • [4.1 `-E`](#4.1 -E)

一. 简介

🔷rgripgrep 的命令行工具,可用来替代传统的grep命令。

  • 默认使用递归检索
bash 复制代码
rg [选项] PATTERN [PATH]

🔷rg 默认会自动忽略

  • .git/
  • .ignore
  • .gitignore → 如果文件中有下面这些文件夹的话,在搜索时也会被忽略
    • target/
    • logs/
    • node_modules/

二. 和grep相同的配置项

配置项 解释
-i, --ignore-case 不区分大小写
-F, --fixed-strings 不使用正则检索
-v, --invert-match 除外
-n, --line-number 显示行号
-c, --count 显示文件内的配置数
-l, --files-with-matches 仅显示匹配到的文件名
-L, --files-without-match 仅显示非匹配到的文件名
-o, --only-matching 仅显示匹配到的部分
-A N, --after-context=N 显示匹配行的后N行
-B N, --before-context=N 显示匹配行的前N行
-C N, --context=N 显示匹配行的前后N行
-e, --regexp 搜索多个关键字
-P, --pcre2 使用 PCRE2 正则引擎
-x, --line-regexp 整行匹配
-H, --with-filename 强制显示文件名

三. 特有的配置项

3.1 --no-heading

🔷文件名和匹配内容在一行显示

bash 复制代码
PS E:\cbc> rg -H 1.15 ./cbc.iml
./cbc.iml
120:    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
PS E:\cbc>
PS E:\cbc> rg -H 1.15 --no-heading ./cbc.iml
./cbc.iml:120:    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
PS E:\cbc>

3.2 --no-line-number

🔷不显示行号

bash 复制代码
PS E:\cbc> rg 1.15 ./cbc.iml
120:    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
PS E:\cbc>
PS E:\cbc> rg 1.15 --no-line-number ./cbc.iml
    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
PS E:\cbc>

3.3 -t

🔷只检索指定后缀的文件

  • 查看支持的所有文件后缀
bash 复制代码
PS E:\cbc> rg --type-list | head
ada: *.adb, *.ads
agda: *.agda, *.lagda
aidl: *.aidl
alire: alire.toml
amake: *.bp, *.mk
asciidoc: *.adoc, *.asc, *.asciidoc
asm: *.S, *.asm, *.s
asp: *.ascx, *.ascx.cs, *.ascx.vb, *.asp, *.aspx, *.aspx.cs, *.aspx.vb
ats: *.ats, *.dats, *.hats, *.sats
avro: *.avdl, *.avpr, *.avsc
  • 只检索java文件
bash 复制代码
PS E:\cbc> rg --no-heading -t java "贾飞天" . | head -n 3
.\src\main\java\com\example\jmw\thread_service\ThreadService2.java:                put("姓名", "贾飞天");
.\src\main\java\com\example\jmw\controller\Test14Controller.java:        test14SubForm1.setName("贾飞天");
.\src\main\java\com\example\jmw\controller\Test19Controller.java:                put("name", "贾飞天");

3.4 -g

🔷给搜索增加过滤条件

  • 排除任意路径中的controller文件夹
bash 复制代码
PS E:\cbc> rg --no-heading -g "!**/controller/**" -t java "@Service" .
.\src\main\java\com\example\jmw\thread_service\ThreadService2.java:10:@Service
.\src\main\java\com\example\jmw\thread_service\ThreadService1.java:8:@Service
.\src\main\java\com\example\jmw\aspect\service\J003BusinessService.java:12:@Service
.\src\main\java\com\example\jmw\aspect\service\J002BusinessService.java:6:@Service
.\src\main\java\com\example\jmw\service\ZTestService.java:13:@Service
.\src\main\java\com\example\jmw\aspect\service\CommonService.java:13:@Service
.\src\main\java\com\example\jmw\service\VipUserCart.java:11:@Service("VipUserCart")
.\src\main\java\com\example\jmw\service\Test5Service.java:13:@Service
.\src\main\java\com\example\jmw\service\Test4Service.java:17:@Service
  • 排除任意路径中的target文件夹
  • 仅检索yml文件
bash 复制代码
PS E:\cbc> rg --no-heading -g "!**/target/**" -g "*.yml" "url" .
.\src\main\resources\application-product.yml:3:    url: jdbc:mysql://localhost/myblog?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
.\src\main\resources\application-test.yml:5:      jdbc-url: jdbc:mysql://localhost/myblog?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
.\src\main\resources\application-test.yml:11:      jdbc-url: jdbc:mysql://localhost/pythonblog?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
.\src\main\resources\application-dev.yml:5:    url: jdbc:mysql://localhost/myblog?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT

3.5 --files

🔷列出当前文件夹下的所有的yml文件

bash 复制代码
PS E:\cbc> rg --files -g '*.yml' .
.\target\classes\application-product.yml
.\target\classes\application.yml
.\target\classes\application-dev.yml
.\target\classes\application-test.yml
.\src\main\resources\application.yml
.\src\main\resources\application-test.yml
.\src\main\resources\application-product.yml
.\src\main\resources\application-dev.yml

3.6 -z--search-zip

🔷注意:rg -z 只支持【单文件压缩格式】,不支持像.zip这样的容器。

目前支持这些单文件压缩格式:gzip、bzip2、xz、LZ4、LZMA、Brotli、Zstd。

bash 复制代码
apluser@FengYeHong-HP:20260504$ zgrep -a "MCP" AI.zip
3. MCP
apluser@FengYeHong-HP:20260504$ rg -z "MCP" AI.zip
apluser@FengYeHong-HP:20260504$
apluser@FengYeHong-HP:20260504$ rg -z "MCP" AI.txt.gz
9:3. MCP
apluser@FengYeHong-HP:20260504$

四. 注意事项

4.1 -E

  • rg中,-E表示指定文件编码(Encoding)
  • grep中,-E表示ERE正则
相关推荐
天天喝旺仔9 分钟前
Linux 性能排查实战:用 perf、strace 与火焰图定位 CPU、内存与 IO 瓶颈
linux·性能优化·运维开发
LuminousCPP14 分钟前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
第十人i17 分钟前
Linux 系统初始化配置清单:新服务器快速部署
linux·服务器
LongRunning19 分钟前
【Linux】RK3568-OpenCV+YOLO(七)
linux
j7~27 分钟前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
傲世仙尊1 小时前
设计者的取舍-路径fork的诞生与全局文件队列
linux
逐流人1 小时前
Containerd容器管理实战:从架构原理到nerdctlcrictl工具链
linux·运维·云原生·容器·云计算·containerd
Tairitsu_H1 小时前
[Linux] 编辑器vim、编译器和动静态链接
linux·vim·gcc·g++·动态链接·静态链接
lzx_0021 小时前
Linux指令(一) 简单了解部分指令
linux
小则又沐风a1 小时前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp