注意:这不是重复的。我正在处理一个特定实例,其中 grep 排除路径/目录的选项没有按预期方式运行。
我正在尝试使用 grep 递归搜索我的根文件系统。我试图排除某些目录,如/proc
、/sys
和/usr/local
。如果我使用--exclude-dir=${DIR_NAME}
,那么它不会在以下路径中搜索${DIR_NAME}
,但这将还${DIR_NAME}
意味着如果位于当前工作目录以下的级别,它将拒绝搜索下面的路径${DIR_NAME}
。例如,考虑这个文件系统树:
${PWD}/
data/
settings/
sys/
users/
developer/
projects/
my_os/
build/
src/
apps/
sys/
Makefile
extras/
sys/
apps/
os/
如果我希望搜索排除${PWD}/sys
和 其下的所有内容,grep -rl --exclude-dir=sys
则会将其排除,但它也会排除${PWD}/data/settings/sys
和${PWD}/users/developer/projects/my_os/src/sys
这两个我想包含在搜索中的目录。
我原本希望--exclude-dir
/--exclude
能够允许使用正则表达式,但我发现此评论表明它们确实如此,但似乎正则表达式语法不会影响实用程序的行为(例如"^/(dev|proc)"
)。如果这两个选项不使用正则表达式,我没问题,但我不希望将排除模式应用于单个路径组件。有没有办法让它像这样工作?
答案1
只需使用这个:
grep -r "text" | grep -i -v ^sys/
您可以根据需要添加任意数量的“| grep -i -v ^dir/”。