2015-06-25 97 views
2
06/25 11:07:24 [INFO] *** CONTROL OUT bytes: 020106/25 11:07:24 [INFO]*** CONTROL IN bytes:080205063D715EB8F4740400200000FFE7010002000000000000000000000006/25 11:07:24 [INFO] hardware revision: 006/25 11:07:24 [INFO] dongle firmware version: 2.506/25 11:07:24 [INFO] dongle bluetooth address: 06:3D:71:5E:B8:F406/25 11:07:24 [INFO] CLIENT: [06/25 11:07:24] Dongle | Version|"majorVersion":2,"minorVersion":5,"deviceAddr":6,61,113,94,184,244],"flashEraseTime":1140,"firmwareStartAddress":8192,"firmwareEndAddress":124927,"ccIC":2,"hardwareRevision":0,"revision":0}06/25 11:07:24 [INFO] CLIENT: [06/25 11:07:24] Dongle | Set Power Level | 506/25 11:07:24 [INFO] Received message from client.06/25 11:07:24 [INFO] *** CONTROL OUT bytes: 020D050 

所以,我想通过把每个命令/节在新行,这样清理它,需要帮助清理日志文件使用bash

06/25 11:07:24 [INFO] CLIENT: [06/25 11:07:24] Dongle | Set Power Level | 5 
06/25 11:07:24 [INFO] Received message from client. 
06/25 11:07:24 [INFO] *** CONTROL OUT bytes: 020D050 

,但我真的不知道从这往哪儿走。

+1

做线真正对接起来反对彼此喜欢那?一个“行”的结尾就在下一个“行”的时间戳开始之前? –

回答

4

更新:评论合并在答案!谢谢,Charles Duffypabouk

假设你的字符串是filename

# bound to GNU sed, because of '-r/--regexp-extended' 
sed -r 's:[0-9]{2}/[0-9]{2}:\n&:g' <filename 

# without '-r': 
sed 's:[0-9][0-9]/[0-9][0-9]:\n&:g' <filename 

为了获得更好的安全性,pabouk建议匹配较长的模式:

sed -r '[email protected][0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}@\n&@g' <filename 
+3

'sed ...

+0

@Charles Duffy:谢谢。我会牢记这一点。 –

+0

如果在输出中使用整个匹配的字符串,则不需要使用子表达式。当你不使用它作为分隔符时,也不需要转义'/'。做这个:'s:[0-9] {2}/[0-9] {2}:\ n&:g'。 ---另外为了更安全,我也会匹配时间:'s @ [0-9] {2}/[0-9] {2} [0-9] {2}:[0-9] {2 }:[0-9] {2} @ \ n&@ g' ---值得一提的是'-r'选项(扩展正则表达式)是GNU sed的扩展。 – pabouk

2
awk 'BEGIN { RS="[0-9]{2}/[0-9]{2}"; } { print rt $0; rt = RT; }' < filename 
+0

此脚本不会将日期传递给输出。 – pabouk

+0

谢谢@pabouk。更新。 –