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

Linux bash如何根据其他行的模式匹配替换指定行的字符串?

错误原因分析

你原有命令的核心逻辑存在问题:只要当前行不匹配^REF\*ZZ\*SO规则,就会触发x;s/ST\*850\*/ST\*850C\*/;x逻辑,不管该ST对应的块里有没有匹配SO的REF行,所有ST行都会被替换,不符合你只替换命中块的需求。

正确实现方案

正确的sed逻辑需要按块缓存ST到下一个ST/文件结尾之间的内容,命中REF规则时才修改缓存里的ST行,命令如下:

sed -i '/^ST\*850/{x;/./p;x;h;b}; /^REF\*ZZ\*SO/{x;s/ST\*850/ST\*850C/;x}; H; $!b; $x;p' file

命令逻辑说明

  • 遇到ST*850开头的行时,先把之前缓存的块内容输出,再把当前ST行存入hold空间,跳过后续逻辑处理下一行
  • 遇到REF*ZZ*SO开头的行时,取出hold空间的内容,把ST*850替换为ST*850C后再存回hold空间
  • 其他普通行直接追加到hold空间缓存
  • 读到文件最后一行时,把剩余缓存的块内容输出

运行后输出和你给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:01