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

如何在Bash中用Sed替换每个文本块的首个指定单词

解决方法

你的问题出在原命令里的q选项——它会让sed处理完第一个匹配内容就直接退出,自然不会处理第二个start-end块;另外-z参数将整个文本作为单行读取,也不利于按独立块处理。

可以用以下sed命令实现需求,无需离开Bash:

sed -E '
/start/{
    :process_block
    N
    /end/!b process_block
    s/my/our/1
}
' <<< "$mytext"

命令解释:

  • /start/{...}:匹配到包含start的行时,执行花括号内的逻辑
  • :process_block:定义一个循环标记
  • N:读取下一行并追加到当前模式空间
  • /end/!b process_block:如果当前模式空间里还没出现end,就跳回process_block标记继续读取行,直到把整个start-end块都读进来
  • s/my/our/1:在整个块的内容里,只替换第一个出现的my为our

执行后,文本会被处理成:

start
This is our house and I can see my car from it.
This is my dog and it dislikes squirrels.
end

start
This is our car and I can see my house from it.
This is my dog and it dislikes squirrels.
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:56:10