当前位置: 首页 > 科技观察

什么是ripgrep(rg)命令?它是做什么用的?

时间:2023-03-20 14:05:21 科技观察

ripgrep是开源社区正在进行的RIIR(用Rust重写)工作的出色成果。它旨在成为经典grep命令的高级替代工具。其语法如下:rg[files/directories]使用ripgrep而不提供要搜索的文件名。如果没有提供文件名,将搜索所有文件。这在你不知道你要搜索的关键字在哪个文件中的情况下非常有用。当然,我们也可以使用grep来搜索所有文件,但是ripgrep不需要提供额外的参数。什么是ripgrepripgrep是一个将gitignore考虑在内的递归正则表达式模式匹配工具。如果您在gitignore中排除了文件或目录,ripgrep将忽略它们,从而加快搜索的执行时间。ripgrep的几个显着特点如下:目录递归搜索;输出中不同的颜色突出显示;支持多种编码格式,如UTF-8、SHIFT_JIS等;可以搜索压缩文件的zip文件;默认隐藏文件会被忽略,gitignore文件中的过滤器设置也会被忽略。你可以把它想象成grep,但ripgrep搜索文件和文件内容,而不是grep处理的原始字节流。安装ripgrep大多数Linux系统都预装了grep,但是ripgrep没有这样的权限,所以我们需要手动安装。ripgrep在所有主要Linux发行版的存储库中都可用,因此我们可以使用我们的包管理器安装它。如果你是ArchLinux用户,可以使用以下命令安装:pacman-SripgrepGentoo用户使用以下命令安装ripgrep:emergesys-apps/ripgrepFedoras或RedHat使用以下命令:sudodnfinstallripgrepopenSUSE(15.1及更新版本)用户使用以下命令:sudozypperinstallripgrepDebianBuster(v10)或更高版本的用户可以使用apt;UbuntuCosmicCutlefish(18.10)或更高版本也可以使用该发行版的官方存储库:sudoaptinstallripgrep如果您熟悉grep命令,请使用ripgrep命令,您会发现ripgrep的工作方式类似。它以字符串和文件名作为参数,运行时搜索文件并显示输入字符串与文件内容匹配的位置。基本搜索下面的例子,我们在Cargo.html中搜索词描述:$rgdescriptionCargo.toml3:description="更直观的du版本"53:extended-description="""\ripgrep会在指定的位置搜索file,结果会显示匹配的文本和行号:如果搜索多个文件(如果你不指定任何文件,它将搜索所有文件),那么ripgrep也会在搜索结果中显示文件名:或者,你可以使用--file选项,里面包含要搜索的关键字(表达式),当你想搜索一组关键字时,可以把它们放在一个文件中,然后使用--file选项指定:contextsearch有时,有一个匹配的上下文是一种很好的显示方式,尤其是在代码库中搜索时。要使用上下文搜索,可以使用-C或--context选项,它接受一个值并显示之前的行和匹配值之后:有时候,我们只想看到上面的几行,包括匹配线;其他时候,我们只需要下面的行,包括匹配行。使用选项-A,或--after-context,后跟一个值,将显示每个匹配行之后的行:至于显示匹配行之前的行,你可以使用-B或--before-context,和然后提供一个值(即行数):列选项ripgrep提供的列有几个选项。如果你使用的是vim,你可以使用--column选项,它会在结果中显示匹配的文本在哪一列,以"row:column"的形式:另一个与列相关的选项是-M或--max-columns,取最大列数的值。如果匹配行的列数超过最大值,它会告诉你输出到终端时忽略了特定行:其他选项除了上面提到的,ripgrep中还有其他几个选项。例如:可以使用-s或--case-sensitive选项来区分大小写:如果不想区分大小写,可以使用-i或--i??gnore-case:另外,如果目标你要搜索的文件特别大,可以开启多线程搜索。使用-j或--threads选项,后跟一个值:$rg-j4TODO要在搜索中排除关键字或表达式,您可以使用-v或--invert-match选项:ripgrep可以在压缩文件(如果存档是文本文件),使用-z或--search-zip选项。它通常与-a选项一起使用,该选项也将二进制文件视为文本文件。ripgrep是一个很棒的工具,虽然它暗示要取代grep,但它实际上并没有取代grep,因为它们的搜索目标不同。我们可以在日常工作中根据需要使用它。以上就是本次分享的全部内容,欢迎讨论。