我正在尝试使用 grep 的 --include 选项,但它的行为并不符合我的预期。
考虑这个简化的测试:
设置
me@de31:~/tmp$ cat file.h
This is a .h file
me@de31:~/tmp$ cat file.c
This is a .c file
核实
me@de31:~/tmp$ grep "This is a" *
file.c:This is a .c file
file.h:This is a .h file
使用--include
me@de31:~/tmp$ grep "This is a" * --include="*.c"
file.h:This is a .h file
me@de31:~/tmp$ grep "This is a" * --include="*.h"
file.c:This is a .c file
使用--排除
me@de31:~/tmp$ grep "This is a" * --exclude="*.c"
file.h:This is a .h file
me@de31:~/tmp$ grep "This is a" * --exclude="*.h"
file.c:This is a .c file
如您所见,--include 与 --exclude 具有相同的输出。 stackexchange 上的另一篇文章声称“-r”是必需的,但我也尝试过,并且它没有改变输出。
答案1
这似乎是某种错误。在 Ubuntu 启动板上发现了这个错误文件,标题为:--include 与 --exclude 的作用相同!。
我的 Fedora 14 系统上的示例:
$ more file.*
::::::::::::::
file.c
::::::::::::::
This is a .c file
::::::::::::::
file.h
::::::::::::::
This is a .h file
包括
$ grep "This is a" * --include="*.c"
file.c:This is a .c file
$ grep "This is a" * --include="*.h"
file.h:This is a .h file
排除
$ grep "This is a" * --exclude="*.c"
file.h:This is a .h file
$ grep "This is a" * --exclude="*.h"
file.c:This is a .c file
grep 版本
$ grep --version
grep (GNU grep) 2.8