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

如何用sed将a.py第3行及以后内容替换b.py对应行?

解决方案

方法1:结合head和sed(直观易懂)

这种方法先提取b.py的前2行,再提取a.py第3行及之后的内容,合并后覆盖b.py:

{ head -n 2 b.py; sed -n '3,$p' a.py; } > temp.py && mv temp.py b.py
  • head -n 2 b.py:提取b.py的前2行
  • sed -n '3,$p' a.py:提取a.py从第3行到末尾的所有内容
  • 把两部分内容输出到临时文件temp.py,再替换原b.py(用临时文件是避免直接覆盖时的文件损坏风险)

方法2:用sed单命令实现

如果偏好只用sed完成,可以通过读取外部内容并删除原文件后续行来实现替换:

sed '3,$ {
    r /dev/stdin
    d
}' b.py < <(sed -n '3,$p' a.py)

或者写成单行形式:

sed -e '3,${r /dev/stdin' -e 'd;}' b.py < <(sed -n '3,$p' a.py)
  • 对b.py的第3行到末尾的行,先读取标准输入(即a.py的目标内容),再用d命令删除当前行,从而实现替换而非插入
  • 如果需要直接修改b.py文件,可以添加-i参数(GNU sed支持-i,BSD sed需要写成-i ''):
sed -i '3,$ { r /dev/stdin; d; }' b.py < <(sed -n '3,$p' a.py)

原命令失效原因

你之前用的sed -n 3r<(sed -n '3,$p' a.py) b.py,本质是在b.py的第3行之后插入a.py的内容,而b.py原有的第3行及之后的内容并未被删除,所以最终结果是插入而非替换,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:48:20