需要关于另一个grep命令输出的grep帮助吗

需要关于另一个grep命令输出的grep帮助吗,grep,tail,cat,Grep,Tail,Cat,我有一个文件test.log。非常大的日志文件。它有不同级别的日志记录。例如,跟踪,调试,信息,警告和错误 显然,trace级别的消息只是在高速发送垃圾邮件。我想查看所有没有跟踪级别日志的消息 所以我这样做了: cat test.log | grep -v "trace" cat test.log | grep -v "trace" | grep "keyword1" 效果很好 现在我想根据某个关键字keyword1过滤剩余的消息 所以我这样做了: cat test.log | grep -

我有一个文件test.log。非常大的日志文件。它有不同级别的日志记录。例如,
跟踪
调试
信息
警告
错误

显然,
trace
级别的消息只是在高速发送垃圾邮件。我想查看所有没有
跟踪
级别日志的消息

所以我这样做了:

cat test.log | grep -v "trace"
cat test.log | grep -v "trace" | grep "keyword1"
效果很好

现在我想根据某个关键字
keyword1
过滤剩余的消息

所以我这样做了:

cat test.log | grep -v "trace"
cat test.log | grep -v "trace" | grep "keyword1"
效果很好

现在我想连续地获得相同的输出,我想用
tail-f
替换
cat

tail -f test.log | grep -v "trace" | grep "keyword1"
但这是行不通的。我一点输出都没有

我做错了什么?以及如何获得所需的过滤“尾部和跟随”输出

谢谢你的帮助


(顺便说一句,我正在使用cygwin…如果这有什么关系的话)

您的代码工作正常,只是遇到了缓冲延迟。所以你会看到很长一段时间的空白,然后是一小段大量的文本,然后是另一次等待。阅读以了解正在发生的事情的解释。

tail-f
跟随文件的“新输入行”。周期性输出永远不会到达管道
grep
命令(至少不会,直到
tail
终止)

要定期“跟踪”这些日志文件中的更改,您可能需要使用
watch

watch -n 1 -- 'tail -n 20 test.log | grep -v trace | grep keyword1'

这将每秒(
-n1
)更新日志文件的最后20行。

您遇到缓冲问题:出于性能原因,
grep
将在其缓冲区中保留相当多的输出,并将一次性输出整个数据块。这意味着,当从输入中读取一行时,
grep
将在读取(并通过)更多行后将其发送到stdout,这可能需要很长一段时间才能使用
tail-f
处理正在读取的日志文件

tail -f test.log | grep -v "trace" | grep "keyword1"
许多
grep
变体都有一个打开线路缓冲模式的开关,该模式将单独输出每一条线路,但会造成一些性能损失。例如,有一个选项可以实现这种效果


只要将该选项(或适用于您的
grep
版本的相应选项)添加到所有
grep
调用中,您就会在日志文件中添加一个匹配的like后看到一些输出。

但是根据您的解释
tail-n20 test.log | grep-v trace
也不应该工作,但是使用1 grep的tail管道工作。但是两个连续的管道grep不起作用。@bits强制更改是从
tail-f
tail-n
。我的例子很好地处理了一个,更不用说200个链接grep了。。。