需要关于另一个grep命令输出的grep帮助吗
我有一个文件test.log。非常大的日志文件。它有不同级别的日志记录。例如,需要关于另一个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 -
跟踪
,调试
,信息
,警告
和错误
显然,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了。。。