grep --line-buffered 直到 X 行?

Phi*_*ide 7 grep

我正在查看日志并希望在程序尝试失败 3 次后进行检测:

tail -f file.log | grep --line-buffered program\ failed\ string
Run Code Online (Sandbox Code Playgroud)

如果来自grep命中 3的行数我想返回一个错误。

我怎样才能做到这一点?

use*_*259 6

awk是一个很好的扫描流的工具。

我认为它应该显示所有行以查看日志直到它退出,这与您的grep示例相反,它只显示错误行。

tail -f file.log | awk '
    BEGIN {
        count = 0
    }

    {
        print($0)

        if ($0 ~ /program failed/) {
            count++
            if (count == 3) {
                exit(1)
            }
        }
    }
'
Run Code Online (Sandbox Code Playgroud)

您可以将 awk 代码移动到tail.awk并根据需要调用tail -f file.log | awk -f tail.awk

等效地,以更紧凑的形式:

tail -f file.log | awk '1; /program failed/ && ++count == 3 { exit 1 }'
Run Code Online (Sandbox Code Playgroud)