如何在Linux中安装ripgrep工具

时间:2020-03-05 15:28:10  来源:igfitidea点击:

Ripgrep是一种面向行的搜索工具,结合了Silver Searcher的实用性和GNU grep的速度。
它通过递归搜索当前目录路径以查找正则表达式模式(默认情况下会忽略隐藏文件和二进制文件)来工作。
当前在Windows,Mac OS和Linux上受支持,每个新版本发行后都提供二进制下载。

为什么要使用ripgrep?

它比grep,awk和sed更快。
默认情况下,忽略二进制文件和隐藏文件。
与grep类似,它可以搜索特定类型的文件或者显式忽略其他文件。

本机支持UTF和Unicode支持以外的文本编码。
Ripgrep的速度来自Rust的正则表达式引擎,Rust的正则表达式引擎使用有限自动机,SIMD和其他积极的文字优化来构建,以解决其快速搜索问题。
它还支持使用中间缓冲区使用内存映射进行搜索,从而使其适合于单个文件和大型目录。

如何安装Ripgrep

ripgrep的二进制名称是rg。
Linux二进制文件是静态可执行文件,而Windows二进制文件是使用MinGW(GNU)或者Microsoft Visual C++(MSVC)构建的。

在Mac OS X Homebrew上,我们可以从homebrew-core安装它,如下所示:

$brew install ripgrep

或者,我们也可以使用自定义水龙头安装使用rust每晚编译的二进制文件(包括SIMD和所有优化):

$brew tap burntsushi/ripgrep https://github.com/BurntSushi/ripgrep.git
$brew install burntsushi/ripgrep/ripgrep-bin

如果我们是Windows Chocolatey用户,则可以从官方存储库进行安装。

$choco install ripgrep

如果我们是Arch Linux用户,则可以从官方存储库进行安装。

$pacman -S ripgrep

如果我们是Gentoo用户,则可以从官方存储库进行安装。

$emerge ripgrep

如果我们是Fedora 24+用户,则可以从copr安装。

$dnf copr enable carlgeorge/ripgrep
$dnf install ripgrep

如果我们是RHEL/CentOS 7用户,则可以从copr安装。

$yum-config-manager --add-repo=https://copr.fedorainfracloud.org/coprs/carlgeorge/ripgrep/repo/epel-7/carlgeorge-ripgrep-epel-7.repo
$yum install ripgrep

如果我们是Nix用户,则可以从nixpkgs安装。

$nix-env --install ripgrep #Or using the attribute name, which is also `ripgrep`

如果我们是Rust程序员,则可以随货一起安装。
请注意,这要求我们安装Rust 1.12或者更高版本。

$cargo install ripgrep

ripgrep当前不在任何其他软件包存储库中。
我想改变一下。

几个例子

我们可以使用命令“ rg'name'”递归搜索任何关键字,如下所示:

$rg plugins

本示例跳过搜索路径中的所有隐藏文件和二进制文件。
可以使用'-u标志'或者'-uu标志'明确声明,如下所示。

$rg -uu plugins  # similar to `grep -r` 
$rg -uuu plugins  # similar to `grep -a -r`

搜索并替换

从给定文件中搜索模式,每行一个模式。
当多次使用此标志或者与'-e /-regexp'标志组合使用时,将搜索提供的所有模式。
空的图案行将与所有输入行匹配,并且换行符不算作图案的一部分。
-r,--replace <ARG>用打印结果时给定的字符串替换每个匹配项。

1)查找名字和姓氏,并使用正则表达式模式将它们互换,将它们分配给两个变量并应用--replace标志

$rg '([A-Z][a-z]+)\s+([A-Z][a-z]+)' --replace ', ' #'([A..Z]..)' -> regexp flag

使用--files标志在文件中搜索模式,该模式打印将在不执行搜索的情况下搜索的每个文件。
l --files-with-matches标志显示具有至少一个匹配项的路径。
同样对于显示不匹配的文件(--files-without-match);打印将要搜索的每个文件,而无需实际执行搜索。
这对于确定是否正在搜索特定文件很有用。

2)通过符号链接在文档目录中搜索包含插件的文件

$rg -LF 'plugins' /home/localhost/Documents/# -L flag for following symbolic links

包含或者排除与-g或者--glob标志匹配给定glob的文件/目录进行搜索。
这总是会覆盖任何其他忽略逻辑。
可以使用多个glob标志。
通配符规则与.gitignore通配符匹配。
在前面加上一个!排除它。

$rg plug -g 'README.*'
$rg plug -g '!*.min.js' #excludes glob