0

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                 |....    |

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

4

1 回答 1

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,可能需要更改\+*.

于 2013-10-23T10:09:56.223 回答