我正在尝试从pcregrep的搜索结果中排除多个目录
pcregrep --exclude_dir=^\./(foo/abc|bar/cde)$ --recursive --regex alpha .换句话说,我希望查找包含alpha的所有文件,并且希望在搜索过程中忽略./foo/abc/*和./bar/cde/*文件。不工作,目录不会被排除。怎么了?
发布于 2012-09-03 16:46:22
--exclude_dir模式只匹配目录名,而不是整个路径。因此,您不能在模式中包含/。如果要排除的目录名是唯一的,则可以使用:
pcregrep --exclude_dir='^abc|cde$' -r alpha .请注意,您经常需要使用'或使用任何其他引用/转义机制来包围模式。在大多数情况下,您可以省略--regex=。
如果您使用zsh作为shell并设置了EXTENDED_GLOB,则可以使用以下解决方案来排除整个路径:
pcregrep alpha **/*~(foo/abc/*|bar/cde/*)(.)但是,您所请求的特性可以很容易地在pcregrep中实现:下载其源代码(pcre library)并进行更改
pcre_exec(exclude_dir_compiled, NULL, nextfile, nflen, 0, 0, NULL, 0)在文件pcregrep.c to中
pcre_exec(exclude_dir_compiled, NULL, buffer, (int) strlen(buffer), 0, 0, NULL, 0)请注意,此更改不向后兼容。最好的方法是引入一个新的--exclude_path标志。
https://stackoverflow.com/questions/12244055
复制相似问题