查找不包含字符串的文件

时间:2013-02-11 10:00:55

标签: regex linux grep

要查找当前文件夹中包含“foo”的所有文件,我使用:

grep -r "foo" .

要查找当前文件夹中包含“bar”的所有文件,我使用:

grep -r "bar" .

但是如何查找不包含'foo'和'bar'的所有文件?

5 个答案:

答案 0 :(得分:16)

要打印不包含某些字符串的,请使用-v标记:

grep -r -v "bar" . | grep -v "foo"

这为您提供包含foobar的所有行。

要打印不包含某些字符串的文件,请使用-L标记。要不匹配多个字符串,可以使用带有-P标志的正则表达式(可以使用几个正则表达式标志):

grep -r -L -P "(foo|bar)" .

这会打印一个不包含foobar的文件列表。

感谢Anton Kovalenko指出这一点。

答案 1 :(得分:3)

试试这个:

  grep  -L -e  "foo\|bar" *

答案 2 :(得分:1)

使用awk,例如:

awk 'BEGIN {f=ARGV[1] ; ff=0} f != FILENAME { if ( ff>0 ) { print f } ; ff=0 ; f=FILENAME } /SEARCHSTRING/ {ff=1} END {if ( ff>0 ) { print f } }' INPUT_FILE_LIST(PATTERN)

基本上它会读取每个输入文件,如果看到你的SEARCHSTRING(可以是正则表达式),它会保存该信息。完成当前文件后(或在最后一个文件之后),检查它是否找到了什么,如果是,则打印以前的文件名。

答案 3 :(得分:1)

尝试以下方法。这应该工作

  

grep -rL -P“(foo | bar)”。

答案 4 :(得分:1)

递归搜索目录以查找不包含XYZ的所有文件

find . -type f | xargs grep -L "XYZ"