2010-07-22 48 views
3

我有一个正则表达式的大文件,每行一个。我想反对grep另一个多行文件对任何出现在第一个文件中的正则表达式。这样的事情:使用正则表达式列表grep一个文件

grep -v fileWithManyRegularExpressions fileThatMightMatchSomeRegularExpressions 

是否有一个优雅的方法来执行循环每一个正则表达式?

回答

11
grep -v -f regexes.txt content.txt 
+1

只记得-v是在任何匹配后应用的,所以有效的是否定正则表达式的联合,而不是正则表达式的否定的联合。 – 2010-07-22 15:50:31

+0

所以'grep -v -f'对应于“没有正则表达式匹配内容”,而'grep -f'是“一个或多个正则表达式匹配内容”。这些看起来似乎是目前最常见的用例。消极联盟意味着什么? – 2013-06-22 04:25:16

+0

@StevenLu否定的联合会是“一个或多个正则表达式与内容不匹配”。这相当于“所有这些正则表达式匹配内容”的否定。请参阅https://en.wikipedia.org/wiki/De_Morgan%27s_laws – shiri 2018-01-02 09:56:36

2

至少与Gnu grep,你可以使用--file=<filename>,一切都会好的。