21

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

4

3 回答 3

39

使用“-L”选项以使文件没有模式。根据手册页:

-L, --files-without-match

抑制正常输出;而是打印通常不会打印输出的每个输入文件的名称。扫描将在第一次匹配时停止。

于 2009-05-19T07:09:53.890 回答
6

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

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

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

grep -L "一些表达式" *

于 2009-05-19T07:01:17.710 回答
0

尝试“count”并过滤等于“:0”的地方:

grep -c [pattern] * | grep ':0$'

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

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

于 2009-05-19T07:11:21.017 回答