12

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

grep -r "foo" .

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

grep -r "bar" .

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

4

5 回答 5

23

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

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

这将为您提供所有包含fooor的行bar

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

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

这将打印不包含foo或的文件列表bar

感谢Anton Kovalenko指出这一点。

于 2013-02-11T10:02:26.727 回答
6

递归搜索目录中不包含 XYZ 的所有文件

find . -type f | xargs grep -L "XYZ"
于 2018-02-08T13:09:09.120 回答
4

试试这个:

  grep  -L -e  "foo\|bar" *
于 2013-02-11T10:22:59.843 回答
2

试试下面的。这应该工作

grep -rL -P "(foo|bar)" 。

于 2013-02-11T10:15:33.167 回答
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(可以是正则表达式),它会保存该信息。在完成当前文件之后(或在最后一个文件之后),检查它是否找到了某些东西,如果是,则打印之前的文件名。

于 2013-02-11T10:11:10.640 回答