要找到所有包含当前文件夹中的“富”的文件的文件,我用:查找不包含字符串
grep -r "foo" .
要找到所有包含“栏中的”当前文件夹中的文件,我使用:
grep -r "bar" .
但是如何找到所有不包含'foo'和'bar'的文件?
要找到所有包含当前文件夹中的“富”的文件的文件,我用:查找不包含字符串
grep -r "foo" .
要找到所有包含“栏中的”当前文件夹中的文件,我使用:
grep -r "bar" .
但是如何找到所有不包含'foo'和'bar'的文件?
要打印线不包含一些字符串,可以使用-v
标志:
grep -r -v "bar" . | grep -v "foo"
这使您做的所有行不包含foo
或bar
。
要打印文件不包含某些字符串,请使用-L
标志。为了不匹配几个字符串,可以使用与-P
标志的正则表达式(也有可以使用几种正则表达式标志):
grep -r -L -P "(foo|bar)" .
这将打印不包含foo
或bar
文件列表。
感谢Anton Kovalenko指出了这一点。
使用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
(可以是正则表达式),它保存这些信息。在完成当前文件(或最后一个文件之后)后,检查它是否找到了某些内容,如果是,则打印前一个文件名。
请尝试以下操作。这应该工作
grep -rL -P“(foo | bar)”。
试试这个:
grep -L -e "foo\|bar" *
递归搜索目录中的那些不包含XYZ
find . -type f | xargs grep -L "XYZ"
错误的所有文件。 '-v'是关于非匹配行存在的,而不是关于*匹配行不存在*的。 – 2013-02-11 10:03:39
@AntonKovalenko你是对的,我删除了管道中的'-r'。对于“不匹配的行”,这是OP所要求的:'grep -v“foo”'goves行与'foo'不匹配。 – alestanis 2013-02-11 10:05:10
他询问了*根本不包含* foo和bar *的文件,而不是*包含一些非小节线和一些非foo行*的文件。 – 2013-02-11 10:06:18