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

使用sed将文件指定行替换为另一文件内容的问题求解

问题原因

问题出在sed的命令执行顺序上:d删除命令执行后会立即清空当前模式空间,直接跳转到下一行的处理流程,排在d之后的r读文件命令没有执行机会,因此foo.txt的内容不会输出。

解决方法

方法1:调整sed内部命令顺序(最简兼容方案)

将r命令放在d命令之前执行即可。r命令会先把读取到的文件内容加入输出队列,再用d删除原匹配行,即可实现行替换效果,修改后的sed语句如下:

sed -e '/b/ {
  r /dev/stdin
  d
}' "template.txt" < "foo.txt"

运行后输出结果为:

a
Hello, World!
c

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

如果后续需要扩展更复杂的处理逻辑,awk的写法更易懂,不容易踩sed的命令顺序坑:

awk '
NR == FNR { replace_content = replace_content $0 "\n"; next }
/b/ { printf "%s", replace_content; next }
1
' foo.txt template.txt

这段逻辑先读取foo.txt的全部内容存为变量,匹配到目标行时输出存储的替换内容、跳过原行,其余行正常输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03