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

Linux下如何使用sed替换两行间内容为变量值并覆盖原文件

解决方案

核心问题原因

你写的命令使用单引号包裹sed脚本,shell不会对单引号内的$str1做变量展开,所以$str1会被当成普通字符串处理,无法替换为变量的实际取值。

GNU Sed(Linux 环境通用写法)

直接使用双引号包裹sed脚本,同时加上-i参数实现原位覆盖原文件:

sed -i "/BEGIN/,/END/c\BEGIN\n$str1\nEND" file

BSD Sed(macOS 环境适配写法)

macOS自带的sed要求-i参数必须显式指定备份文件后缀,不需要备份的话传空字符串即可:

sed -i '' "/BEGIN/,/END/c\BEGIN\n$str1\nEND" file

跨环境兼容写法(推荐)

如果需要兼顾不同系统环境,可以指定备份后缀,执行完成后手动删除备份文件即可:

# 执行替换时自动生成备份文件file.bak,替换完成后删除备份
sed -i.bak "/BEGIN/,/END/c\BEGIN\n$str1\nEND" file && rm file.bak

注意事项

如果你的$str1变量内容里包含斜杠/、反斜杠\这类sed特殊字符,需要提前对特殊字符做转义处理,避免出现sed语法解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:42:03