@typeof

ripgrep —— 高效的正则表达式匹配工具

riggrep 是以行为单位的正则表达式搜索工具。一句话,grep 能干的,它也能干。
但是,ripgrep 又拥有传统grep没有的特性:

使用方法

grep相近。

rg [options] PATTERN [path]
some_command | rg PATTERN

不同点:

性能

性能是 rg 的重要卖点之一。

博主自己做的测试(i5-7200U,Intel Pro 5400s 180G)

数据集:Linux 5.0(pf 补丁集)内核代码树

固定字串:搜寻memory encrypt,不分大小写

工具命令用户态 CPU 时间最大驻留集
riggreprg -i 'memory encrypt' . 1.05s8052k
grepgrep -r -n -i --color 'memory encrypt' .2.54s2484k

[A-Z]+_SUSPEND(官方的那个测试案例)

工具命令用户态 CPU 时间最大驻留集
riggreprg -i '[A-Z]+_SUSPEND' . 1.80s8024k
grepgrep -r -n -i --color '[A-Z]+_SUSPEND' .4.22s2456k

评论数据集(4.5GB,位于机械硬盘)

多词语匹配 (awesome|nice|great|fine|good|best|better|friendly)

工具命令用户态 CPU 时间最大驻留集
ripgreprg -c -i PATTERN comment40.53s2946612k
ripgrep(禁用 mmap)rg -c -i --no-mmap PATTERN comment40.65s6088k
grepgrep -E -c -i PATTERN comment48.38s2228k

搜寻所有数字

工具命令用户态 CPU 时间最大驻留集
ripgreprg -c '\d*?' comment12.20s2308420k
ripgrep(禁用 mmap)rg -c --no-mmap '\d*?' comment12.59s5792k
grepgrep -c '\d*?' comment25.51s1984k

可见,riggrep更高效(以用户态 CPU 时间计),代价是更大的内存占用。但是,如果考虑实际执行时间(elapsed time),rg 在某些情况下反而不如 grep 高效,如大量的 IO ,尤其是使用机械硬盘时。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »