要找到所有包含當前文件夾中的「富」的文件的文件,我用:查找不包含字符串
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