天下武功,唯快不破——快速搜索工具 ripgrep

本文介绍了快速搜索工具rip grep(rg),通过与其他搜索工具对比,展示其在速度和功能上的优势。rg是用Rust编写,支持丰富的搜索功能、多种编码、查找替换、压缩文件搜索等。文章还提供了rg常用命令的示例,并提到了rg在vim、emacs和VSCode中的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

天下武功,唯快不破——快速搜索工具 ripgrep

2019-06-12 SteamedFish

关注我们,获一手游戏运维方案

 

SteamedFish

 

网易游戏资深运维工程师,主要工作方向为网易游戏 MySQL SaaS 的运维,业余时间喜欢学习各种无用的知识,折腾各种无用的东西。

前言

天下武功,唯快不破!本文介绍快速搜索工具 ripgrep,让你的速度异于常人!

不同内容搜索工具的对比

内容搜索,不就是 grep 命令嘛?其实,还有其他的。让我们对比一下以下搜索工具!!

  • grep :最古老最经典的搜索工具

  • The Platinum Searcher(pt):golang 编写的搜索工具

  • UniversalCodeGrep(ucg):C++ 编写的搜索工具

  • ack:perl 编写的搜索工具

  • sift:golang 编写的搜索工具

  • git-grep:git 自带的搜索工具

  • The Silver Searcher(ag):C 语言编写的搜索工具

  • ripgrep(rg):rust 编写的搜索工具

搜索速度

目录搜索

  • 搜索内容: Linux 内核源码

  • 测试内容:普通搜索,无正则表达式,区分大小写

工具命令时间(秒)
grepgrep -FR ext4 .37.972
ucgucg -Q --nosmart-case ext41.196
ptpt ext40.994
ackack -Q ext48.523
siftsift -SQ ext41.886
git grepgit grep -F ext41.911
agag -sQ ext41.011
rgrg -sF ext40.955

文件搜索

  • 搜索内容:红楼梦全本

  • 测试内容:中文搜索

工具命令时间(秒)
grepgrep '賈母' 24264-0.txt1.084
ucgucg '賈母' 24264-0.txt1.926
ptpt '賈母' 24264-0.txt0.235
ackack '賈母' 24264-0.txt0.845
siftsift '賈母' 24264-0.txt0.228
git grepgit grep --no-index '賈母' 24264-0.txt1.644
agag '賈母' 24264-0.txt1.585
rgrg '賈母' 24264-0.txt0.251

 

对比结论:

pt(The Platinum Searcher) 和 rg(ripgrep) 两个工具,速度最快!

功能对比

ack 的作者维护了一份各种搜索工具的特性对比。可以看到,ack、ag 和 rg 的特性比较丰富。

对比结论

rg,也就是 ripgrep,速度快,特性多,在各种工具中综合实力胜出。不过也有少量特性是 rg 所没有的,这个时候只能使用 ack 或者 ag 等速度稍慢但是仍然比 grep 快很多的工具了。

rg 工具简介

ripgrep 是使用 rust 编写的搜索工具,具有以下特点:

  • 非常快速的搜索速度

  • 极为丰富和实用的搜索功能

  • 支持查找替换

  • 支持搜索多种中文编码的文件(使用 --encoding 指定编码)

  • 支持通过配置文件 .ripgreprc 改变默认行为

  • 支持将搜索结果输出为 json 格式

  • 支持搜索多种格式的压缩文件,例如 gz、bz2 等

  • 支持对输出结果进行排序

  • 默认会读取 .gitignore 文件并忽略其中设置的文件(可以使用 --no-ignore 打开)

  • 默认不会读取隐藏文件(可以使用 --hidden 打开)

  • 默认不会搜索非文本文件(可以使用 --text 打开)

  • 默认不会跟踪符号连接(可以使用 --follow 打开)

以下是部分比较常用的 rg 命令的演示,完整的命令请参考 rg --help

  • 普通搜索:rg name Makefile

  • 正则搜索:rg 'namew+' Makefile

  • 搜索目录:rg 'namew+'

  • 只搜索特定后缀的文件:rg 'namew+' -g '*.c'

  • 不搜索特定后缀的文件: rg 'namew+' -g '!*.c'

  • 只搜索 C 语言文件:rg 'namew+' -g '*.{c,h}'

  • 只搜索 C 语言文件:rg 'namew+' -t c

  • 不搜索 C 语言文件:rg 'namew+' -T c

  • 查看支持的所有类型:rg --type-list

  • 自定义类型:rg 'namew+' --type-add 'web:*.{html,css,js}' -t web

  • 查找内容并替换:rg 'name(w+)' -r NAME$1

  • 不查找超过 50 个字符的行:rg 'namew+' -M 50

rg 工具和编辑器的结合

  • vim:使用 vim-ripgrep 插件

  • emacs:有以下几种选择

    • ripgrep.el

    • ivy 提供了 counsel-rg 命令

    • helm-rg

    • deadgrep

    • color-rg

  • vscode:使用 vscode-ripgrep

这是 emacs 使用 counsel-rg 命令搜索 linux 源码文件的效果:

往期精彩

 

 

Redis 应用层协议解析以及在 Python 客户端中的实现

 

函数式编程在JavaScript下应用实践

 

运维黑科技:百变环境 - direnv 教你 72 变

 

面试被问到 Linux loadavg,看这篇推文就不怕被问倒了

 

Python 代码调试二三事

 

 

 

原始链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值