前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 新变革已经开始,文本三剑客地位不保!

Linux 新变革已经开始,文本三剑客地位不保!

作者头像
民工哥
发布2024-03-21 14:48:36
920
发布2024-03-21 14:48:36
举报

众所周知,在 Linux 系统中,awk、grep、sed 这三个命令,因其功能强大,日常使用频繁,在 Linux 系统下处理文本是个非常不错的神器,grep 用于查找,sed 用于取行和替换,awk 用于运算。因此,这三个命令一直都有着文本三剑客的称号!

但是,随着这个命令的出现,怕是三剑客的地位要不保了!

今天,我们就来聊一聊这个强大的、横空出世的命令:ripgrep!

ripgrep 简介

ripgrep 是一款基于 Rust 语言开发的文本搜索工具,是一款面向行的搜索工具,它递归地在当前目录中搜索正则表达式模式。默认情况下,ripgrep 将尊重 Gitignore 规则,并自动跳过隐藏文件/目录和二进制文件。

ripgrep 可以在多平台下运行,支持 Mac、Linux 和 Windows 等平台。

ripgrep 命令的作用在于帮助用户在指定的目录中快速定位包含特定内容的文本文件,从而极大的提高了我们的日常工作效率。它在搜索查找的过程还支持正则,使用我们的搜索查找模式更加的灵活,轻松实现我们想要的结果。

项目地址:https://github.com/BurntSushi/ripgrep

ripgrep 特点

  • 非常快速的搜索速度。
  • 极为丰富和实用的搜索功能。
  • 支持查找替换。
  • 支持搜索多种中文编码的文件(使用--encoding指定编码)。
  • 支持通过配置文件.ripgreprc改变默认行为。
  • 支持将搜索结果输出为json格式。
  • 支持搜索多种格式的压缩文件,例如gz、bz2等。
  • 对输出结果进行排序。
  • 默认会读取.gitignore文件并忽略其中设置的文件(可以使用--no-ignore打开)。
  • 默认不会读取隐藏文件(可以使用--hidden打开)。
  • 默认不会搜索非文本文件(可以使用--text打开)。

ripgrep 使用场景

ripgrep是一个非常好用的工具,它可以在多种场景下使用,例如:

  • 在代码搜索方面:ripgrep可以快速搜索代码文件,查找特定的代码模式或函数。
  • 日志文件分析:ripgrep可以用于分析大型日志文件,快速查找特定的文本模式或关键字。
  • 配置文件检查:ripgrep可以检查配置文件,查找特定的配置项或错误。
  • 任何需要快速搜索特定文本内容的场景:ripgrep的高效搜索引擎使其在海量文本数据中定位所需信息变得轻而易举。

ripgrep 安装

ripgrep 的二进制名称是 rg。

对于 Windows 系统,推荐直接从GitHub Releases页面下载对应的ripgrep程序,解压并加入到环境变量中。

Mac 系统
代码语言:javascript
复制
brew install ripgrep
rhel/centos7/8 系统
代码语言:javascript
复制
$ sudo yum-config-manager --add-repo=https://copr.fedorainfracloud.org/coprs/carlwgeorge/ripgrep/repo/epel-7/carlwgeorge-ripgrep-epel-7.repo
$ sudo yum install ripgrep
代码语言:javascript
复制
[root@CentOS7-1 ~]# rg --version
ripgrep 13.0.0
-SIMD -AVX (compiled)
+SIMD +AVX (runtime)

ripgrep 使用操作

语法格式如下

代码语言:javascript
复制
USAGE:
    
    rg [OPTIONS] PATTERN [PATH ...]
    rg [OPTIONS] -e PATTERN ... [PATH ...]
    rg [OPTIONS] -f PATTERNFILE ... [PATH ...]
    rg [OPTIONS] --files [PATH ...]
    rg [OPTIONS] --type-list
    command | rg [OPTIONS] PATTERN
    rg [OPTIONS] --help
    rg [OPTIONS] --version

For more information try --help

ripgrep支持多种命令行参数和选项,例如:

代码语言:javascript
复制
-a 或 --text:搜索二进制文件。
-j 或 --threads <NUM>:指定搜索时使用的线程数。
-t 或 --type <TYPE>:只搜索指定类型的文件。
--type-list:列出支持的文件类型。
-u 或 --unrestricted:搜索 .gitignore 里的文件。
-u 或 --uu:搜索二进制文件。
-u 或 --uuu:搜索大文件。
-V 或 --version:打印版本信息。
-H 或 --with-filename:打印匹配的文件路径。
-w 或 --word-regexp:把搜索参数作为单独单词匹配。
--sort <SORTBY>:将输出结果按降序进行排序。
--stats:打印出统计结果。
--vimgrep:每一次匹配都单独打印一行。
实例操作

搜索当前目录下所有文件中的字符串“hello”:

代码语言:javascript
复制
rg hello

搜索当前目录及其子目录下所有文件中包含字符串“hello”的文件,并将结果输出到终端:

代码语言:javascript
复制
rg -l hello

搜索当前目录及其子目录下所有文件中包含字符串“hello”的文件,并将结果输出到文件output.txt中:

代码语言:javascript
复制
rg -o hello > output.txt

在当前目录及其子目录下递归搜索所有.txt文件,并搜索字符串“hello”:

代码语言:javascript
复制
rg hello *.txt

在当前目录及其子目录下递归搜索所有文件,并搜索字符串“hello”,忽略大小写:

代码语言:javascript
复制
rg -i hello

在当前目录及其子目录下递归搜索所有文件,并搜索字符串“hello”,只显示匹配行的行号:

代码语言:javascript
复制
rg --line-number hello

搜索当前目录及其子目录下所有以“.txt”结尾的文件中包含字符串“hello”的文件,并将结果输出到终端,同时显示匹配行的行号:

代码语言:javascript
复制
rg --line-number hello *.txt

在当前目录及其子目录下递归搜索所有文件,并搜索字符串“hello”,忽略名为.git的文件:

代码语言:javascript
复制
rg hello --no-ignore .git

ripgrep可以搜索压缩文件中的内容,如.gz、.bz2等。例如,要搜索所有包含“GPL”的gzip压缩文件,可以使用:

代码语言:javascript
复制
[root@CentOS7-1 ~]# rg GPL *.gz
apache-tomcat-8.5.55.tar.gz: binary file matches (found "\0" byte around offset 3)
mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz: binary file matches (found "\0" byte around offset 3)
node-v0.10.25.tar.gz: binary file matches (found "\0" byte around offset 27)
node-v18.16.1.tar.gz: binary file matches (found "\0" byte around offset 27)
zellij-x86_64-unknown-linux-musl.tar.gz: binary file matches (found "\0" byte around offset 3)

ripgrep 还可以通过将匹配的文本替换为一些其他文本,比如:用 FAST 替换所有出现的 fast ,使用 ripgrep 的 --replace参数:

代码语言:javascript
复制
[root@CentOS7-1 ripgrep-0.7.1]# rg fast README.md --replace FAST
75:  FASTer than both. (N.B. It is not, strictly speaking, a "drop-in" replacement
88:  color and full Unicode support. Unlike GNU grep, `ripgrep` stays FAST while
119:### Is it really FASTer than everything else?
124:Summarizing, `ripgrep` is FAST because:
129:  optimizations to make searching very FAST.

注意:这个功能只是替换字符输出,并不是真正的替换掉文本的内容。

打印输出系统内置的文件类型

代码语言:javascript
复制
[root@CentOS7-1 ~]# rg --type-list

更多相关的使用,大家可以参考官方的文档,或下载自行体验。

总结

总体使用下来,可以说 ripgrep 是一个快速、高效、非常优秀的文本搜索工具,它可以在指定的目录及其子目录下的文件中搜索匹配的字符串或正则表达式。

它提供了丰富的选项和参数,可以根据需要进行定制和调整,具有快速、高效、可定制性强等特点,能够满足不同用户的搜索需求。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ripgrep 简介
  • ripgrep 特点
  • ripgrep 使用场景
  • ripgrep 安装
  • ripgrep 使用操作
    • 实例操作
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档