【问题标题】:Search for string in hex dumps在十六进制转储中搜索字符串
【发布时间】:2013-10-23 08:53:53
【问题描述】:

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

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

【问题讨论】:

  • 在您进入这个兔子洞之前,请检查您是否只是在运行您的应用程序的另一个实例,或者其他人连接到数据库并同时对数据进行更改!这就是我的情况。

标签: oracle11g full-text-search hexdump


【解决方案1】:
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,可能需要将 \+ 更改为 *

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2019-07-27
    • 2018-01-31
    • 2012-08-15
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多