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

如何让sed仅处理每行首个匹配的替换规则后停止?

实现sed的分支式替换(匹配首个规则即停止)

要让sed对每行文本优先匹配最具体的规则,匹配成功后立即停止后续规则的处理,而非链式执行所有替换,核心是利用sed的t命令——该命令会在前一个替换操作成功执行时,跳转到脚本末尾(跳过当前行剩余的所有命令)。

修改后的sed脚本

s/Execution error for request ([0-9]+). Reason: (ESS-[0-9]+) Job logic indicated a system error occurred while executing an asynchronous java job for request ([0-9]+). Job error is.*/\1 \2/p
t
s/Execution error for request ([0-9]+). Reason: com.jbo.AttrValException: (JBO-[0-9]+): Attribute RequestId is required./\1 \2/p
t
s/Execution error for request ([0-9]+). .*/\1/p

关键说明

  • 每个替换命令后添加t:一旦当前替换成功,t会触发跳转,直接结束当前行的处理,避免后续规则对已替换内容再次操作。
  • 修正原脚本语法错误:第二个替换命令中,捕获组引用需用\1/\2而非1/2,否则无法正确提取匹配内容;第一个替换规则末尾添加.*,确保匹配整行内容。
  • 配合-n选项:仅在替换成功时通过p命令输出结果,避免空行或原始内容输出。

测试验证

输入文本

Execution error for request 12345678. Reason: com.jbo.AttrValException: JBO-27035: Attribute RequestId is required.
Execution error for request 87546213. Reason: ESS-07033 Job logic indicated a system error occurred while executing an asynchronous java job for request 87546213. Job error is: null.
Execution error for request 54789632. Reason: null

执行命令

sed -E -n -f filter.sed input.txt

输出结果

12345678 JBO-27035
87546213 ESS-07033
54789632

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:07:00