如果我多次使用 --exclude-from
(以包含多个文件),grep
将仅使用最后一个 --exclude-from
还是会将所有过滤器“或”在一起,就像它们位于一个文件中一样(并使用一个 --exclude-from
)?
最佳答案
尽管从手册页或 grep 的源代码中都不清楚这一点,但排除是附加的。这是我的例子:
创建五个名为“file.a”到“file.f”的文件,每个文件包含“test_string”,以及五个过滤器“ex_a.lst”到“ex_f.lst”,其中包含“*.a”到“*.f” ,分别是:
$ for X in a b c d e f; do echo test_string > file.$X; echo file.$X > ex_$X.lst; done
$ ls -l
total 48
-rw-rw-r-- 1 user group 7 Jan 17 17:02 ex_a.lst
-rw-rw-r-- 1 user group 7 Jan 17 17:02 ex_b.lst
-rw-rw-r-- 1 user group 7 Jan 17 17:02 ex_c.lst
-rw-rw-r-- 1 user group 7 Jan 17 17:02 ex_d.lst
-rw-rw-r-- 1 user group 7 Jan 17 17:02 ex_e.lst
-rw-rw-r-- 1 user group 7 Jan 17 17:02 ex_f.lst
-rw-rw-r-- 1 user group 12 Jan 17 17:02 file.a
-rw-rw-r-- 1 user group 12 Jan 17 17:02 file.b
-rw-rw-r-- 1 user group 12 Jan 17 17:02 file.c
-rw-rw-r-- 1 user group 12 Jan 17 17:02 file.d
-rw-rw-r-- 1 user group 12 Jan 17 17:02 file.e
-rw-rw-r-- 1 user group 12 Jan 17 17:02 file.f
$ cat file.a
test_string
$ cat ex_a.lst
file.a
在当前目录中搜索“test_string”,不带过滤器:
$ grep -R test_string | sort
file.a:test_string
file.b:test_string
file.c:test_string
file.d:test_string
file.e:test_string
file.f:test_string
所有文件都匹配。现在从三个文件添加三个过滤器:
$ grep -R test_string --exclude-from=ex_a.lst --exclude-from=ex_c.lst --exclude-from=ex_e.lst | sort
file.b:test_string
file.d:test_string
file.f:test_string
我们只剩下三个结果,那些没有被过滤掉的结果!为此,我们必须选择所有三个“ex_[ace].lst”过滤器文件。
关于grep --排除-来自 : how to include multiple files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702134/