2017-01-17 4 views

Antwort

0

Obwohl dies weder von den man-Seiten noch vom Quelltext von grep klar ist, ist exclude-from additive. Hier ist mein Beispiel:

Erstellen Sie fünf Dateien namens "file.a" bis "file.f" mit jeweils "test_string" und fünf Filter "ex_a.lst" bis "ex_f.lst" mit "* .a" bis '* .f' auf:

$ 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 

Suche nach 'test_string' im aktuellen Verzeichnis, ohne Filter:

$ 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 

Alle angepassten Dateien. Jetzt drei Filter aus drei Dateien hinzufügen:

$ 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 

Wir bleiben mit nur drei Ergebnisse, diejenigen, die nicht herausgefiltert wurden! Damit dies der Fall ist, müssen wir alle drei 'ex_ [ace] .lst' Filter-Dateien ausgewählt haben.

Verwandte Themen