【问题标题】:Grep : get all file that doesn't have a line that matches [closed]Grep:获取所有没有匹配行的文件[关闭]
【发布时间】:2019-08-30 18:43:26
【问题描述】:

我有很多包含多行的文件,在大多数情况下,其中一行包含特定的模式。我想列出每个不包含此模式行的文件。

【问题讨论】:

  • 为什么我得到这个 -1?!
  • 我的猜测是有人认为手册中的信息很容易获得。
  • 如果您找到了答案,请不要用它来编辑您的问题,邮政答案代替。现在你甚至可以接受你自己的答案。

标签: file grep


【解决方案1】:

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

-L, --files-without-match

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

【讨论】:

    【解决方案2】:

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

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

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

    grep -L “一些表达” *

    【讨论】:

    • 不需要循环只需要使用 grep 的“-L”选项。
    【解决方案3】:

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

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

    (如果你使用 TurboGREP咳嗽,你不会有 -L 开关 ;))

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

    【讨论】:

    • TurboGREP 似乎有 -l 和 -v,所以你可以只使用 grep -lv 'expr' *
    • 如果 turbogrep 像 gnu grep 一样工作,-lv 不会做你想做的事。它会向您显示所有包含与表达式不匹配的行的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多