p0lAris Asked: 2019-02-27 08:41:18 +0800 CST2019-02-27 08:41:18 +0800 CST 2019-02-27 08:41:18 +0800 CST ripgrep 路径模式 772 我希望 ripgrep 搜索具有指定模式的路径。例如 rg PATTERN --path REGEX 其中 PATTERN 是 grep 的模式,而 REGEX 是路径匹配模式。 我已经分散了文档,我不确定是否包含此功能。 ripgrep 2 个回答 Voted Best Answer BurntSushi5 2019-02-27T09:29:46+08:002019-02-27T09:29:46+08:00 使用该-g/--glob标志,如指南中所述。它使用通配符而不是正则表达式,但在实践中完成了同样的事情。例如: rg PM_RESUME -g '*.h' PM_RESUME在我检出 Linux 内核时仅在 C 头文件中找到。 ripgrep 无法使用正则表达式匹配文件路径。相反,如果您绝对需要使用正则表达式,则应使用 xargs: rg --files -0 | rg '.*\.h$' --null-data | xargs -0 rg PM_RESUME 分解它: rg --files -0在标准输出上打印它要搜索的所有文件,由NUL. rg '.*\.h$' --null-data仅匹配文件列表中以 . 结尾的行.h。--null-data确保我们保留我们的NUL字节。 xargs -0 rg PM_RESUME拆分NUL分隔的参数,并将它们交给 ripgrep,它与您的初始正则表达式匹配的文件列表精确对应。 处理NUL字节对于完全正确是必要的。如果文件路径中没有空格,则命令更简单: rg --files | rg '.*\.h$' | xargs rg PM_RESUME Matt Deacalion 2021-01-16T05:04:20+08:002021-01-16T05:04:20+08:00 你可以使用fd: $ fd -p REGEX | xargs rg PATTERN
使用该
-g/--glob
标志,如指南中所述。它使用通配符而不是正则表达式,但在实践中完成了同样的事情。例如:PM_RESUME
在我检出 Linux 内核时仅在 C 头文件中找到。ripgrep 无法使用正则表达式匹配文件路径。相反,如果您绝对需要使用正则表达式,则应使用 xargs:
分解它:
rg --files -0
在标准输出上打印它要搜索的所有文件,由NUL
.rg '.*\.h$' --null-data
仅匹配文件列表中以 . 结尾的行.h
。--null-data
确保我们保留我们的NUL
字节。xargs -0 rg PM_RESUME
拆分NUL
分隔的参数,并将它们交给 ripgrep,它与您的初始正则表达式匹配的文件列表精确对应。处理
NUL
字节对于完全正确是必要的。如果文件路径中没有空格,则命令更简单:你可以使用fd: