我不知道这是不是标准,但我就是这么想的。
我想要做的是在运行可执行文件时过滤掉某个日志消息。
我试过这个:
Executable 2>&1 /dev/null | grep -v "fixme:quartz:Parser_OutputPin_QueryInterface No interface for {56a868a5-0ad4-11ce-b03a-0020af0ba770}!"一个正常人:
Executable | grep -v "fixme:quartz:Parser_OutputPin_QueryInterface No interface for {56a868a5-0ad4-11ce-b03a-0020af0ba770}!"但终点站仍然充斥着数千条fixme:quartz等信息。
发布于 2015-01-21 16:15:57
首先,您需要了解您想要的消息是发送到stdout还是stderr。在第一个示例中,stderr被重定向到stdout --这是"2>&1“部分。命令行中还有"/dev/null“,这并不完全有意义。为什么命令行上出现"/dev/null“?
第二,你需要决定你想要看到什么信息(S)。"-v“标志到grep将反转与您的模式字符串不匹配的仅匹配行将被打印出来。您指定的模式非常精确:您可能需要尝试一个不太特定的模式,比如'fixme:quartz',因为它的长度较短,将导致grep -v不匹配更多的行。
如果我是你,我会这样做:
Executable > log 2> err它将stdout和stderr分隔成两个不同的文件。如果我想找到“固定物:石英”的字符串,我会:
grep 'fixme:quartz' log
grep 'fixme:quartz' err决定要查看哪个文件,然后使用支持正则表达式(如vim)的文本编辑器来查找我想要的内容。
如果这不起作用,或者Executable应该运行很长时间,并且您只想看到特定的消息,那么执行上面的过程,使用vim确定正则表达式,并确定消息是在stdout还是stderr上。然后你就可以这样做:
Executable > log 2> err
tail -f log | grep 'fixme:quartz' # or whatever regular expression当Executable运行并生成消息时,tail -f将定期从文件"log“中读取它们,并打印到自己的标准输出中,grep将在那里为您筛选。
https://unix.stackexchange.com/questions/180298
复制相似问题