2014-01-29 14 views
1

不知道您是否可以通过tail和grep来完成此操作。比方说,我有一个我想尾巴的日志文件。它在调试模式下会吐出相当多的信息。我想用grep的有关只有我的模块信息,模块名称是在日志中,像这样:尾和grep组合显示多行模式中的文本

/*** Module Name | 2014.01.29 14:58:01 
a multi line 
dump of some stacks 
or whatever 
**/ 
/*** Some Other Module Name | 2014.01.29 14:58:01 
this should show up in the grep 
**/ 

所以,你可以想像,这将是吐出线属于“模块名称数量“可能是2或50,直到结束模式出现(** /)

+0

我认为您最好使用awk。 –

回答

2

从你的描述,好像这应该工作:

tail -f log | awk '/^\/\*\*\* Module Name/,/^\*\*\//' 

但要警惕的缓冲问题。 (打印到文件中的行很可能会在实际打印之前看到高延迟)。

0

我认为您将不得不为此安装pcregrep。那么这将工作:

tail -f logfile | pcregrep -M "^\/\*\*\* Some Other Module Name \|.*(\n|.)*?^\*\*/$" 

这个工作在测试,但由于某些原因,我不得不您的示例文本追加到了100倍以上的日志文件输出前开始出现。但是,在调用此行后立即写入日志文件的所有“其他模块名称”数据最终都会打印到标准输出。

+0

“某些原因”正在缓冲。 pcregrep是块缓冲它的输出,并没有打印任何东西,直到它(大约)4k打印。 –