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

如何使用sed将匹配关键词的首次行替换为Value1、第二次替换为Value2

正确实现方式

你之前尝试的写法不生效,原因是sed替换语法里的数字标记,默认只代表单行内的第N次匹配,不是全文件范围内匹配到的第N行。

你可以用以下两种方案实现需求:

方案1:sed 实现(直接修改原文件)

针对你的场景,匹配关键词"sudo docker push",第一次、第二次匹配到的整行分别替换为目标值,命令如下:

# Linux 环境执行
sed -i '
/sudo docker push/{
  x
  /^$/{s//1/;x;s#.*#sudo docker push IP1:PORT/ABC:1#;b}
  /^1$/{s//2/;x;s#.*#sudo docker push IP2:PORT/ABC:1#;b}
  x
}' your-file-name

命令说明:

  • 每次匹配到含指定关键词的行时,用x命令交换模式空间和保持空间的内容,借助保持空间存储匹配次数
  • 保持空间为空时,说明是第一次匹配,更新次数标记为1,替换整行内容为第一个目标值后跳过后续处理
  • 保持空间值为1时,说明是第二次匹配,更新次数标记为2,替换整行内容为第二个目标值后跳过后续处理
  • 匹配次数超过2次时,不做修改直接输出

注:如果是MacOS环境,需要把sed -i改为sed -i ''


方案2:awk 实现(逻辑更直观)

如果允许用awk,语法会更易懂,不用处理sed的空间交换逻辑:

awk '/sudo docker push/{
    c++
    if(c==1) $0="sudo docker push IP1:PORT/ABC:1"
    else if(c==2) $0="sudo docker push IP2:PORT/ABC:1"
}1' your-file-name > tmp && mv tmp your-file-name

命令说明:

  • 匹配到关键词行时计数器c自增
  • 根据计数器值对应替换整行内容
  • 末尾的1表示输出所有处理后的行,最后通过临时文件覆盖原文件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:45:02