我希望 ripgrep 搜索具有指定模式的路径。例如
rg PATTERN --path REGEX
其中 PATTERN 是 grep 的模式,REGEX 是路径匹配模式。
我已经阅读了文档,并且不确定此功能是否已包含在内。
答案1
使用-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
答案2
你可以使用FD:
$ fd -p REGEX | xargs rg PATTERN