You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sed为从日志提取的每条SQL语句末尾添加分号失效问题求解

问题根因

你在grep中使用了-zZ参数,会让匹配结果之间用ASCII NUL字符(\x00)分隔,而sed默认按换行符分割读取行,所有匹配结果会被sed识别为单行,你写的s/\x0/;/默认只替换第一个匹配到的NUL字符,因此只有第一条SQL末尾能加上分号,后续的NUL没被处理,SQL就全部连在一起。

解决方法

方案一(更推荐,无需处理特殊分隔符)

你的日志每条记录刚好占一行,完全不需要使用-zZ参数,直接简化命令即可:

grep -oP ' SQL "\K[^"]+' log.log | sed 's/$/;/'

该命令会逐行提取SQL内容,逐行在末尾添加分号,输出的每条SQL独立一行,符合预期。

方案二(保留原有-zZ参数用法)

如果必须保留-zZ参数的用法,需要让sed也按NUL字符分割处理:

grep -oPzZ ' SQL "\K[^"]+' log.log | sed -z 's/$/;/' | tr '\0' '\n'

这里sed -z会让sed把NUL作为行分隔符,逐行(每个SQL对应一行)添加末尾分号,最后用tr命令把NUL替换为换行符,方便阅读。

输出效果

针对你提供的日志样例,执行后输出结果为:

alter table HFJ_RES_LINK modify ( SRC_PATH varchar2(200) );
create index IDX_VALUESET_EXP_STATUS on TRM_VALUESET(EXPANSION_STATUS);

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:51:00