Grep:获取所有没有匹配行的文件

22

我有很多文件,每个文件都有多行内容,在大多数情况下,其中一行包含某种模式。我想列出每个没有包含这种模式的文件。


为什么我会因为这个得到-1分?! - claf
我猜想有人认为该信息在手册中很容易找到。 - JesperE
如果你已经找到了答案,请不要编辑你的问题并将其发布为答案。现在甚至可以接受你自己的答案。 - JesperE
3个回答

41
使用"-L"选项可以使文件不包含模式。根据 man 页面:
-L,--files-without-match 抑制正常输出;而是打印每个输入文件的名称,从其中没有正常输出的文件开始。扫描将在第一个匹配项上停止。

6

Grep返回0/1以指示是否有匹配,因此您可以执行以下操作:

for f in *.txt; do
    if ! grep -q "some expression" $f; then
        echo $f
    fi
done

编辑:您也可以使用-L选项:

grep -L“某个表达式” *


不需要循环,只需使用grep的“-L”选项。 - claf

0
尝试使用“count”并过滤等于“:0”的内容:
grep -c [pattern] * | grep ':0$'

(如果您使用TurboGREP cough,您将没有-L开关;))

(编辑:在正则表达式的末尾添加“$”,以防文件名中有“:0”)


TurboGREP似乎有-l和-v选项,所以你可以直接使用grep -lv 'expr' * - amertune
1
如果 turbogrep 的工作方式类似于 GNU grep,那么 -lv 不会做你想要的事情。它会显示所有包含任何不匹配表达式的行的文件。 - Dan Pritts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接