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

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

2019-06-12 SteamedFish

天下武功,唯快不破——快速搜索工具 ripgrep_第1张图片

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

 

天下武功,唯快不破——快速搜索工具 ripgrep_第2张图片

SteamedFish

 

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

前言

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

不同内容搜索工具的对比

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

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

    天下武功,唯快不破——快速搜索工具 ripgrep_第3张图片

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

    天下武功,唯快不破——快速搜索工具 ripgrep_第4张图片

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

    天下武功,唯快不破——快速搜索工具 ripgrep_第5张图片

  • ack:perl 编写的搜索工具

    天下武功,唯快不破——快速搜索工具 ripgrep_第6张图片

  • sift:golang 编写的搜索工具

    天下武功,唯快不破——快速搜索工具 ripgrep_第7张图片

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

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

    天下武功,唯快不破——快速搜索工具 ripgrep_第8张图片

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

    天下武功,唯快不破——快速搜索工具 ripgrep_第9张图片

搜索速度

目录搜索

  • 搜索内容: Linux 内核源码

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

工具 命令 时间(秒)
grep grep -FR ext4 . 37.972
ucg ucg -Q --nosmart-case ext4 1.196
pt pt ext4 0.994
ack ack -Q ext4 8.523
sift sift -SQ ext4 1.886
git grep git grep -F ext4 1.911
ag ag -sQ ext4 1.011
rg rg -sF ext4 0.955

文件搜索

  • 搜索内容:红楼梦全本

    天下武功,唯快不破——快速搜索工具 ripgrep_第10张图片

  • 测试内容:中文搜索

工具 命令 时间(秒)
grep grep '賈母' 24264-0.txt 1.084
ucg ucg '賈母' 24264-0.txt 1.926
pt pt '賈母' 24264-0.txt 0.235
ack ack '賈母' 24264-0.txt 0.845
sift sift '賈母' 24264-0.txt 0.228
git grep git grep --no-index '賈母' 24264-0.txt 1.644
ag ag '賈母' 24264-0.txt 1.585
rg rg '賈母' 24264-0.txt 0.251

 

对比结论:

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

功能对比

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

天下武功,唯快不破——快速搜索工具 ripgrep_第11张图片

对比结论

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

rg 工具简介

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

天下武功,唯快不破——快速搜索工具 ripgrep_第12张图片

  • 非常快速的搜索速度

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

  • 支持查找替换

  • 支持搜索多种中文编码的文件(使用 --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 插件

    天下武功,唯快不破——快速搜索工具 ripgrep_第13张图片

  • emacs:有以下几种选择

    • ripgrep.el

      天下武功,唯快不破——快速搜索工具 ripgrep_第14张图片

    • ivy 提供了 counsel-rg 命令

      天下武功,唯快不破——快速搜索工具 ripgrep_第15张图片

    • helm-rg

      天下武功,唯快不破——快速搜索工具 ripgrep_第16张图片

    • deadgrep

      天下武功,唯快不破——快速搜索工具 ripgrep_第17张图片

    • color-rg

      天下武功,唯快不破——快速搜索工具 ripgrep_第18张图片

  • vscode:使用 vscode-ripgrep

    天下武功,唯快不破——快速搜索工具 ripgrep_第19张图片

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

天下武功,唯快不破——快速搜索工具 ripgrep_第20张图片

往期精彩

 

 

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

 

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

 

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

 

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

 

Python 代码调试二三事

 

天下武功,唯快不破——快速搜索工具 ripgrep_第21张图片

 

 

原始链接

你可能感兴趣的:(天下武功,唯快不破——快速搜索工具 ripgrep)