如何在Linux中安装ripgrep工具
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