用 ripgrep 替换 grep
本文最后更新于 584 天前,其中的信息可能已经有所发展或是发生改变。

grep 在 *nix 系统都有预装,也是程序员日常工作经常用到的工具。我最近的工作,涉及到很多大文本处理,grep 处理得不是很快。于是就用到了 ripgrep,这个工具跑起来快很多。本文主要摘录自己平时可能会用到的用法

安装

GitHub Repo 的指引下找到你对应的系统命令安装即可,一行命令。

安装完之后,ripgrep 的可执行命令是 rg

常用参数

一般搜索

rg str sample.txt

默认,标准输出会高亮你的搜索词,并且每行前面会有行号。不过请放心,重定向到另一个文本时,是不包含行号的。

如果你不想要输出行号,使用 -N

rg str sample.txt -N

统计行数

rg str sample.txt -c  # 相当于 grep str sample.txt | wc -l

And 条件

A ha, 现在还不支持,老早就有很多用户提这个需求了。看看固执的作者什么时候允许加上。可以关注这个 Issue

只能管道后再次筛选了, --color always 是为了第一个搜索词也能被高亮

rg str sample.txt --color always | rg str2

Or 条件

使用多个 -e 参数 作为条件。只要匹配到任何一个搜索词,都会被匹配到

rg -e 'str1' -e 'str2' -e 'str3' sample.txt

匹配到N条结果就停止

很多情况下,我们知道只有 N 条匹配项,为了节约时间,希望匹配到足够数量就不要往下搜索了。

rg str sample.txt -m 数量

不输出文件名

默认情况下, ripgrep 会在每行开头输出文件名。当我们需要结合 grep 做统计分析的时候,往往不期望输出文件名。Just add the flag -I

rg 'hello' sample.txt -I

正则

下边的 -e 可以不加,因为默认把搜索词当做正则。

如果希望把搜索词当成普通文本处理,使用 -F ,为什么默认要当成正则呢,神奇的设计,可能文件搜索普遍使用正则?

rg -e '^UE.+?NL' sample.txt

如果期望只输出正则匹配到的组(group),那么可以结合 -r flag 来做到。原理就是将整行文本替换成 $1 (group 1)

rg -e '^.*?(your-pattern).*?$' sample.txt -r '$1'

替换文本

会将搜索到的文本,替换成你指定的再输出。使用 -r

注意,该参数不会改变你原来的文本,只是输出时替换文本

rg -e '123456' sample.txt -r '******'

如果希望实现替换原有文件的特定文本,可以这么做:

rg --passthru 'like' sample.txt -r 'love'

--passthru 参数会将未匹配的行也进行标准输出

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇