首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在活日志(stdout)上实现grep?

如何在活日志(stdout)上实现grep?
EN

Unix & Linux用户
提问于 2015-01-21 16:05:44
回答 1查看 8.6K关注 0票数 0

我不知道这是不是标准,但我就是这么想的。

我想要做的是在运行可执行文件时过滤掉某个日志消息。

我试过这个:

代码语言:javascript
复制
Executable 2>&1 /dev/null | grep -v "fixme:quartz:Parser_OutputPin_QueryInterface No interface for {56a868a5-0ad4-11ce-b03a-0020af0ba770}!"

一个正常人:

代码语言:javascript
复制
Executable | grep -v "fixme:quartz:Parser_OutputPin_QueryInterface No interface for {56a868a5-0ad4-11ce-b03a-0020af0ba770}!"

但终点站仍然充斥着数千条fixme:quartz等信息。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2015-01-21 16:15:57

首先,您需要了解您想要的消息是发送到stdout还是stderr。在第一个示例中,stderr被重定向到stdout --这是"2>&1“部分。命令行中还有"/dev/null“,这并不完全有意义。为什么命令行上出现"/dev/null“?

第二,你需要决定你想要看到什么信息(S)。"-v“标志到grep将反转与您的模式字符串不匹配的仅匹配行将被打印出来。您指定的模式非常精确:您可能需要尝试一个不太特定的模式,比如'fixme:quartz',因为它的长度较短,将导致grep -v不匹配更多的行。

如果我是你,我会这样做:

代码语言:javascript
复制
Executable > log 2> err

它将stdout和stderr分隔成两个不同的文件。如果我想找到“固定物:石英”的字符串,我会:

代码语言:javascript
复制
grep 'fixme:quartz' log
grep 'fixme:quartz' err

决定要查看哪个文件,然后使用支持正则表达式(如vim)的文本编辑器来查找我想要的内容。

如果这不起作用,或者Executable应该运行很长时间,并且您只想看到特定的消息,那么执行上面的过程,使用vim确定正则表达式,并确定消息是在stdout还是stderr上。然后你就可以这样做:

代码语言:javascript
复制
Executable > log 2> err
tail -f log | grep 'fixme:quartz'  # or whatever regular expression

Executable运行并生成消息时,tail -f将定期从文件"log“中读取它们,并打印到自己的标准输出中,grep将在那里为您筛选。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/180298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档