使用grep来查找不包含给定string模式的文件

我在我的Web应用程序中使用以下命令来查找当前目录中包含stringfoo (忽略svn目录)的所有文件。

 find . -not -ipath '.*svn*' -exec grep -H -E -o "foo" {} \; > grep_results.txt 

如何找出不包含单词foo的文件?

如果你的grep有-L (或者--files-without-match )选项:

 $ grep -L "foo" * 

请看http://beyondgrep.com/ 。 它会自动为您排除.svn,为您提供Perl正则expression式,并且是一个简单的Perl程序下载。 相当于你正在寻找的应该是,在ack:

 ack -L foo 

我使用了以下内容:

 grep -rL "foo" ./* | grep -v "\.svn" 

不包括使用第二个grep过滤掉svn文件夹的需求。

最后,我按照朋友的build议正确使用了这个function:

 find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0 

它给了我所有的文件,为零富有匹配:)

我祝你好运

 grep -H -E -o -c "foo" */*/*.ext | grep ext:0 

我用grep -v的尝试只给了我所有没有“foo”的行

你的朋友是“有点”的权利。 你实际上需要:

 find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep :0\$ 

否则,你将得到具有10行w /“foo”的文件,具有100行w /“foo”等的文件以及诸如“my_10_best_friends.txt”之类的具有“0”的行的文件。 。

我的grep没有任何-L选项。 我find解决办法来实现这一点。

这些想法是:

  1. 将所有包含应得string的文件名转储到txt1.txt。
  2. 将目录中的所有文件名转储到txt2.txt。
  3. 使用diff命令来区别2转储文件。

     grep 'foo' *.log | cut -c1-14 | uniq > txt1.txt grep * *.log | cut -c1-14 | uniq > txt2.txt diff txt1.txt txt2.txt | grep ">" 

find *20161109* -mtime -2|grep -vwE "(TRIGGER)"

您可以在“查找”下指定filter,在“grep -vwE”下指定排除string。 如果您需要在修改时间上进行过滤,请在查找下使用mtime。

我使用的是Ubuntu,我试过这个命令: cat file |grep -v "hehe"这可以帮助你过滤包括子串“hehe”的行。

 grep -irnw "filepath" -ve "pattern" 

要么

 grep -ve "pattern" < file 

上面的命令会给我们结果,-vfind正在search的模式的逆