我正在尝试从以下搜索结果中排除多个目录pcregrep
:
pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha .
换句话说,我想找到所有包含 的文件alpha
,并且我想在搜索过程中忽略./foo/abc/*
和文件。./bar/cde/*
不起作用,目录没有被排除在外。怎么了?
的模式--exclude_dir
仅匹配目录名称,而不是整个路径。因此你不能/
在模式里面。如果要排除的目录名称是唯一的,则可以使用:
pcregrep --exclude_dir='^abc|cde$' -r alpha .
请注意,您经常需要使用'
或使用任何其他引用/转义机制来包围模式。在大多数情况下,您可以省略--regex=
.
如果您zsh
用作 shell 并设置了 EXTENDED_GLOB,则可以使用以下解决方案排除整个路径:
pcregrep alpha **/*~(foo/abc/*|bar/cde/*)(.)
但是,您请求的功能可以很容易地在 pcregrep 中实现:下载它的源代码(pcre 库)并更改
pcre_exec(exclude_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0)
在文件pcregrep.c
中
pcre_exec(exclude_dir_compiled, NULL, buffer, (int) strlen(buffer), 0, 0, NULL, 0)
请注意,此更改不向后兼容。最好的方法是引入一个新--exclude_path
标志。