问题标签 [ripgrep]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
508 浏览

vim - 是否可以将 Rg 的结果显示到快速修复窗口中?

当我搜索时:Rg <string>,它会在 FZF 缓冲区中打开结果。通常文件名没有完全显示在其中。曾经逃脱的结果也消失了。如果需要再次检查相同的单词,我必须进行研究。

:vim /pattern/g **/*在 quickfix 中打开结果。有没有办法在快速修复窗口中打开 Rg 结果?如何在 Rg 缓冲区中显示完整的文件名?

0 投票
0 回答
221 浏览

linux - 在 fzf 预览中使用 bat 突出显示行号

我有一个别名,当你传递一个参数时,它看起来像这样

第一部分将返回类似

预览将显示 some_file.pm 的源代码。

我的问题是我想替换 bat 命令bat -R以突出显示第 46 行。我尝试执行以下操作

但这无法在预览中显示

任何想法如何克服这个问题?当我单独运行蝙蝠时,我无法得到抱怨的来源。

0 投票
1 回答
195 浏览

python - 将 ripgrep 的输出通过管道传输到 Python 进行过滤(将文件名与匹配项分开)

我需要使用 ripgrep 来找到某种模式。这将是一个描述化学反应的字符串。ripgrep 的输出如下所示:

凉爽的!但现在我需要使用 Python 脚本过滤掉这些结果。所以我可以将这些结果通过管道传输到 Python 并从标准输入中读取。但是有一个问题:如何保证分隔符?如果我编写 Python 脚本将第三个冒号之后的所有内容作为输入字符串,我如何保证文件本身的名称中没有冒号?当我通过管道传输到 python 时,如何正确地将文件名与匹配项分开?

谢谢,

0 投票
1 回答
1891 浏览

python - 由 vscode 启动的许多 rg 命令消耗了 99% 的 CPU

我在一个非常大的 github 仓库中工作,说它的结构就像

有很多项目,每个项目都包含很多子项目。我只是在处理其中一个子项目(例如subproject-a)。当我在子项目(它是一个 python 子项目)中打开 vscode 时,我注意到它启动了许多rg如下所示的命令,并且我的 CPU 使用率超过 99%。我想知道这些 rg 命令是关于什么的?他们只是在子项目中搜索东西,还是在包含数万个文件的整个 git 存储库中搜索?他们为什么要消耗这么多资源?请问我怎样才能避免这种情况?

/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules.asar.unpacked/vscode-ripgrep/bin/rg --files --hidden --case-sensitive -g **/*.go/** -g **/*.go -g !**/.git -g !**/.svn -g !**/.hg -g !**/CVS -g !**/.DS_Store -g !**/.classpath -g !**/.factorypath -g !**/.project -g !**/.settings -g !**/node_modules -g !**/bower_components -g !**/*.code-search --no-ignore-parent --follow --quiet --no-config --no-ignore-global

0 投票
2 回答
692 浏览

vim - 在 fzf.vim 中使用带有标志的 Ripgrep

我正在使用下面的函数在vim中使用fzf使用ripgrep搜索文件中的内容

我可以使用它执行简单的搜索,但是我无法使用RG标志使我的搜索更精确(在文件类型中搜索、排除目录或在子目录中搜索等)

我发现一些文章建议对功能进行小的更改以获得我正在寻找的内容如下:

  • 删除--之前%s

  • 移除shellescape功能

在这些更改之后,我最初可以使用标志,但是在更新我的搜索时它没有按预期工作。

我想在vim的fzf中按原样使用RG(在终端中的工作方式相同)

0 投票
2 回答
614 浏览

python - 使用 grep 或 rg 查找不同的目录名称

我是 Linux 命令的新手,我正在尝试在目录和包含该单词的所有目录名称中递归搜索一个说“apple”的单词。

我正在使用类似于 grep 的 ripgrep(rg) 来获取其中包含苹果的文件名

前任:

给我输出:

有没有办法只能使用唯一的父文件夹名称?

使用 grep 的解决方案也很好。

太感谢了

0 投票
1 回答
69 浏览

multithreading - 使用 GNU 并行增强 grep 搜索

我正在使用以下 grep 脚本来输出所有不匹配的模式:

patterns 文件包含以下 12 个字符长的子字符串(一些实例如下所示):

large_strings 文件包含大约 20-1 亿个字符的极长字符串(一小段字符串如下所示):

我们如何加快上述脚本(gnu parallel、xargs、fgrep 等)?我尝试使用--pipepart--block但它不允许您通过管道传输两个 grep 命令。

顺便说一句,这些都是十六进制字符串和模式。

下面的工作代码比传统的 grep 快一点:

grep完成模式匹配过程需要一个小时,而ripgrep大约需要 45 分钟。

0 投票
1 回答
104 浏览

grep - 如何让 ripgrep 告诉我列表中的哪些表达式在文件系统上没有匹配项

例如,假设我有要搜索的字符串列表:

在我的仓库中,有包含alfa、和的文件bravo,但没有包含的文件,也没有包含. 然后我希望答案是:charliedeltanebuchadnezzarbartholomew

正如您可能猜到的那样,我正在寻找不推荐使用的东西。我最终使用了以下 Ruby 代码解决方法,因为我在尝试后无法找到解决方案man rg

0 投票
0 回答
75 浏览

python - 如何使用正则表达式找到具有可变长度前缀的重叠匹配?

我正在尝试TODO使用正则表达式匹配某些代码文件中的内部注释等标签。例如考虑以下文件:

请注意,一行中可能有多个标签,只要每个标签前面都有#,因此第二行和第三行应该匹配两次。此外,第一个#(实际代码)之前的前缀可能具有任意长度;这同样适用于每个 之后的内容TODO。除此之外,可能# TODO还有没有注释的子字符串(见第四行;它应该匹配一次,# TODO最后的)。

我一直在 Stackoverflow 和其他网站上搜索,但似乎没有任何问题可以回答您在这些匹配之前有多个重叠匹配和可变长度前缀的问题。我认为问题主要在于尝试结合上下文使用积极的前瞻/后瞻:

  • (?=#\s*TODO[^#]*)不起作用,因为它匹配第四行两次。这就是我说重叠的原因:看起来你必须在匹配时考虑前缀的结构。
  • 我可以匹配前缀(实际代码和没有标签的注释)部分,^[^#']*('[^'\\]*(\\.[^'\\]*)*'[^#']*)*(#\s*(?!TODO)[^#]*)*以便我得到正确的第 4 行,但这是一个可变长度匹配,因此使用积极的后(?<=^[^#']*('[^'\\]*(\\.[^'\\]*)*'[^#']*)*(#\s*(?!TODO)[^#]*)*)(#\s*TODO[^#]*)视将导致每个正则表达式引擎上的错误据我所知(如果工作,无论如何只会匹配第一个# TODO)。
  • 匹配前缀然后使用积极的前瞻类似^[^#']*('[^'\\]*(\\.[^'\\]*)*'[^#']*)*(#\s*(?!TODO)[^#]*)*(?=(#\s*TODO[^#]*)(#\s*(?!TODO)[^#]*)*)也不起作用,因为它只匹配# TODO.

解释一下: \\.匹配转义字符和[^'\\]*任何不是转义字符且不是字符串分隔符的内容,因此'[^'\\]*(\\.[^'\\]*)*'匹配任何字符串文字。在该字符串文字部分之外使用[^#']*意味着:匹配任何不以字符串或注释开头的内容,因此一行的代码部分是^[^#']*('[^'\\]*(\\.[^'\\]*)*'[^#']*)*. 可以找到不包含标签的注释段#\s*(?!TODO)[^#]*,因此可以匹配整个前缀^[^#']*('[^'\\]*(\\.[^'\\]*)*'[^#']*)*(#\s*(?!TODO)[^#]*)*

我使用ripgrep,所以这适用于 PCRE/PCRE2 正则表达式。但是,我会对任何正则表达式方言是否有解决方案感兴趣。

我知道我可以匹配至少有一个正确匹配的每一行,并用某种脚本语言对结果进行后处理以TODO从这些行中提取每一行,但我想知道是否可以仅使用正则表达式。

0 投票
0 回答
47 浏览

emacs - Counsel-rg 省略长加工线

我利用 Counsel-rg 搜索“~[az]+~”的模式,它显示了所需的结果,但省略了长匹配行:

在此处输入图像描述

如何使它能够显示长匹配线?