在十六进制转储中搜索字符串

时间:2013-10-23 08:53:54

标签: oracle11g full-text-search hexdump

Oracle的JDBC驱动程序在11.2中有一个新功能,它可以记录所有网络数据包,但在日志文件中,每个数据包都显示为单独的十六进制转储,格式如下:

 Oct 23, 2013 9:14:46 AM oracle.net.ns.Packet receive
 TRACE_20: 11EEA7F0 Debug: type=6, length=1410, flags=0
 65 20 43 6F 72 70 6F 72     |e.Corpor|
 6F 6E 2E 20 43 6F 70 79     |on..Copy|
 72 69 67 68 74 20 32 30     |right.20|
 30 33 20 4F 72 61 63 6C     |03.Oracl|
 01 00 01 03                 |....    |

如何在日志文件中搜索字符串,因为它们可能跨越日志文件中的多行?

1 个答案:

答案 0 :(得分:0)

sed -e :a -e '$!N;s/\n [0-9A-F][0-9A-F] [0-9A-F ][0-9A-F ] [0-9A-F ][0-9A-F ] [0-9A-F ][0-9A-F ] [0-9A-F ][0-9A-F ] [0-9A-F ][0-9A-F ] [0-9A-F ][0-9A-F ] [0-9A-F ][0-9A-F ]     |\([^|]\+\)|/\1/;ta' -e 'P;D' logfile
Linux上的

会将logfile中的十六进制转储转换为字符串(控制字符和空格保持为句点),其他行保持不变。因此,您只需将其重定向到文件或将其传输到您喜欢的寻呼机,例如减。您可能需要考虑控制字符和空格在搜索多个单词字符串时显示为句点的事实。

对于非GNU sed,可能需要将\+更改为*