Linux 新变革已经开始,文本三剑客地位不保!
共 5637字,需浏览 12分钟
·
2024-04-18 22:46
众所周知,在 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 系统
brew install ripgrep
rhel/centos7/8 系统
$ 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
[root@CentOS7-1 ~]# rg --version
ripgrep 13.0.0
-SIMD -AVX (compiled)
+SIMD +AVX (runtime)
ripgrep 使用操作
语法格式如下
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支持多种命令行参数和选项,例如:
-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”:
rg hello
搜索当前目录及其子目录下所有文件中包含字符串“hello”的文件,并将结果输出到终端:
rg -l hello
搜索当前目录及其子目录下所有文件中包含字符串“hello”的文件,并将结果输出到文件output.txt中:
rg -o hello > output.txt
在当前目录及其子目录下递归搜索所有.txt文件,并搜索字符串“hello”:
rg hello *.txt
在当前目录及其子目录下递归搜索所有文件,并搜索字符串“hello”,忽略大小写:
rg -i hello
在当前目录及其子目录下递归搜索所有文件,并搜索字符串“hello”,只显示匹配行的行号:
rg --line-number hello
搜索当前目录及其子目录下所有以“.txt”结尾的文件中包含字符串“hello”的文件,并将结果输出到终端,同时显示匹配行的行号:
rg --line-number hello *.txt
在当前目录及其子目录下递归搜索所有文件,并搜索字符串“hello”,忽略名为.git的文件:
rg hello --no-ignore .git
ripgrep可以搜索压缩文件中的内容,如.gz、.bz2等。例如,要搜索所有包含“GPL”的gzip压缩文件,可以使用:
[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参数:
[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.
注意:这个功能只是替换字符输出,并不是真正的替换掉文本的内容。
打印输出系统内置的文件类型
[root@CentOS7-1 ~]# rg --type-list
更多相关的使用,大家可以参考官方的文档,或下载自行体验。
总结
总体使用下来,可以说 ripgrep 是一个快速、高效、非常优秀的文本搜索工具,它可以在指定的目录及其子目录下的文件中搜索匹配的字符串或正则表达式。
它提供了丰富的选项和参数,可以根据需要进行定制和调整,具有快速、高效、可定制性强等特点,能够满足不同用户的搜索需求。
春招已经开始啦,大家如果不做好充足准备的话,春招很难找到好工作。
送大家一份就业大礼包,大家可以突击一下春招,找个好工作!