2017-01-30 59 views
0

我刚刚花了几个小时试图从控制台日志,在那里我有我的系统上检测复位:2个连续行用grep或sed的

Boot up message // 1st console output on a boot 
Shutdown message // Last console output on a CLEAN shutdown 

通过用grep的2线以上,在控制台输出,我有一个包含类似文本:

Boot up message 
Shutdown message 
Boot up message 
Shutdown message 
Boot up message 
Boot up message 
Shutdown message 

当复位是连续2个引导信息检测。我有几千次循环穿过去,所以希望能够使用“-n”开关使用grep打印的循环次数,使这样的:

1:Boot up message 
2-Shutdown message 
3:Boot up message 
4-Shutdown message 
5:Boot up message 
6:Boot up message // reset occurred here 
7-Shutdown message 

如何使用SED/grep的(在Cygwin中)找到只有连续的引导消息?

+0

AWK会更好...'的awk“{printf的NR “:” $ 0} p == $ {0 printf的 “发生在这里//复位”} {P = $ 0 ; printf“\ n”}'log' – Sundeep

+0

谢谢,但我正在使用Cygwin,因为它安装在客户端系统上是出于其他原因,我更喜欢bash/sed/grep而不是Windows解决方案。不幸的是,awk没有安装。 –

回答

0

您可以使用此sed

sed -n 'N;/^\(Boot.*\)\n\1/=' file 

(OR)

sed -n 'N;/^\(Boot.*\)\n\1/p' file 

这将输出行号上连续消息。

测试:

$ cat file 
Boot up message 
Shutdown message 
Boot up message 
Shutdown message 
Boot up message 
Boot up message 
Shutdown message 

$ sed -n 'N;/^\(Boot.*\)\n\1/p' file 
Boot up message 
Boot up message 
+0

非常感谢,但它只是拾取其他双启动消息。另外,如果我添加预重新设置的行号以在完整的控制台输出中查找位置,则无法找到任何内容: –

+0

即:'grep -n -e Boot -e Shutdown console.log | sed -n'N;/^ \(Boot。* \)\ n \ 1/=''找不到任何东西(如预期的那样),因此我将其更改为'grep -n -e Boot -e Shutdown console.log | sed -n'N;/^ \(。* Boot。* \)\ n \ 1/=''来说明第一个grep的行号。即使我没有控制台输出的行数,缺失的重置也意味着我仍然需要检查大量的输出以进行中间重置。 –

+0

@JasonEtherton,试试这个:'sed -n'N; /^.* \(Boot。* \)\ n。* \ 1/='file' – sat