当前位置:首页 > 文章列表 > 文章 > linux > Linux sed 原地替换前如何保留备份文件

Linux sed 原地替换前如何保留备份文件

来源:17golang原创 2026-09-11 09:48:06 0浏览 收藏

在 Linux 上用 GNU sed 改配置文件,想保留替换前的内容,关键是给 -i 写出备份后缀,而不是只写一个裸的 -i。最常用的形式是 sed -i.bak 's/旧值/新值/g' app.conf:sed 修改 app.conf,同时把原内容保存为 app.conf.bak

备份后缀紧跟在 -i 后面,例如 -i.bak;GNU sed 会把它追加到原文件名。生产脚本先用无 -i 的命令预览,再用 diff 检查,备份文件保留到确认发布之后。
要点速览
  • -i.bak 会生成同目录的 文件名.bak,不写后缀则没有备份。
  • -i 后面的后缀是可选参数,短选项不要写成容易误读的分离形式。
  • 替换前用标准输出预览,替换后用 diff 比较目标文件和备份文件。

Linux sed -i.bak 怎样生成可回滚的备份

GNU sed 的 -i[SUFFIX] 表示原地编辑。给出 SUFFIX 时,旧文件先按后缀改名保存,临时输出再占用原文件名。因此下面这条命令结束后,app.conf 是新内容,app.conf.bak 是替换前的内容:

# 只替换完整的配置行,并保留替换前文件
sed -i.bak 's/^port=8080$/port=8081/' app.conf

# 查看两个文件是否都存在,再比较实际差异
ls -l -- app.conf app.conf.bak
diff -u -- app.conf.bak app.conf

后缀可以是 .bak.orig 或带日期含义的固定字符串。它不是目录名,也不会自动清理旧备份;如果 app.conf.bak 已经存在,脚本应先决定是覆盖、改用新后缀,还是把旧备份移到受控的归档位置。

Linux GNU sed -i.bak 将原文件、临时输出和 app.conf.bak 备份连接起来的静态结构图
图1:GNU sed 的原地替换配置与备份文件名关系,重点看 SUFFIX 如何落到原文件名后面。

后缀怎么选,哪些 -i 写法容易出错

在 GNU sed 中,不含星号的后缀直接追加到当前文件名;例如 -i.orig 对应 app.conf.orig。带星号的后缀属于 GNU 扩展,可以把星号替换为当前文件名,但跨环境脚本不建议依赖这个特性。

写法结果适用判断
-i.bak修改原文件并生成 文件.bak需要明确回滚点
-i.orig修改原文件并生成 文件.orig项目已有统一后缀
-i修改原文件,不生成备份已由版本控制或外部快照兜底
-i .bak容易把 .bak 当成输入文件不要这样写

尤其要区分 sed -Ei '...'sed -iE '...':前者是启用扩展正则并且不留备份,后者在 GNU sed 中可能把 E 当成备份后缀。想同时使用扩展正则和备份后缀,写成 sed -E -i.bak '...' file 更清楚。

替换前后怎样复查并准备回滚

先去掉 -i,让 sed 把结果输出到标准输出,确认匹配范围没有过宽:

# 先预览,不改动原文件;^ 和 $ 限定整行配置
sed 's/^port=8080$/port=8081/' app.conf

# 确认预览后再原地替换,并留下可回滚副本
sed -i.bak 's/^port=8080$/port=8081/' app.conf

# 只接受预期差异;需要恢复时用备份覆盖回去
diff -u -- app.conf.bak app.conf
# cp -- app.conf.bak app.conf

如果文件属于版本库,仍建议保留 .bak 到变更确认完成;备份和版本控制解决的是不同问题,前者提供就地回退,后者提供可追踪的提交历史。对配置文件批量处理时,避免把 /etc 下的所有文件直接交给通配符,先列出目标清单,再逐个比较差异。

Linux 脚本里的权限、覆盖和跨平台边界

sed -i 通常需要目标目录可写,因为 GNU sed 会创建临时文件并在完成后替换原文件名;文件本身是只读,并不等于目录不可写。脚本要先确认运行用户、目录权限和符号链接策略,再决定是否允许原地编辑。

Linux 上的 GNU sed 与 macOS/BSD sed 对 -i 的参数处理不同。GNU sed 常写 -i.bak;BSD sed 常写 -i '' 表示不备份,若要备份则另行给出后缀。需要跨平台运行时,应在脚本中识别工具实现,或者统一使用临时文件加 mv 的方案,不要假设一条 -i 命令在两边都相同。

GNU Linux sed 与 BSD macOS sed 的 -i.bak、-i 空后缀、目标文件和 diff 复查边界图
图2:Linux/GNU sed 与 BSD/macOS sed 的 -i 参数边界,迁移脚本时不要把两种写法混用。

相关问题

sed -i.bak 会在没有发生替换时生成备份吗?

GNU sed 会按指定后缀创建备份,不能把“没有匹配到文本”当成“没有生成备份”。如果备份是否产生会影响后续逻辑,就在命令前后显式检查文件状态。

为什么不建议直接使用 sed -ni?

-n 会关闭自动输出,若脚本没有显式使用 p 打印匹配内容,原地编辑可能得到空文件。需要静默选项时,先在副本上验证脚本输出。

备份文件应该什么时候删除?

diff、服务配置检查和发布结果都确认后再删除;自动化任务可以按统一保留周期清理,但不要在替换命令刚成功后立刻删除唯一回滚副本。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go regexp.FindAllStringSubmatchIndex Unicode 文本的字节下标怎么转换成字符区间Go regexp.FindAllStringSubmatchIndex Unicode 文本的字节下标怎么转换成字符区间
上一篇
Go regexp.FindAllStringSubmatchIndex Unicode 文本的字节下标怎么转换成字符区间
Go sync.WaitGroup Done 少调用一次为什么会一直等待
下一篇
Go sync.WaitGroup Done 少调用一次为什么会一直等待
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    80次使用
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    237次使用
  • C-Eval中文评测基准:大语言模型多学科能力评估指南
    C-Eval
    深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
    163次使用
  • AI Prompt Library:免费AI提示词库,助力ChatGPT高效创作与营销
    AI Prompt Library
    探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
    96次使用
  • Generrated:DALL·E 2/3 AI绘画提示词灵感库与图像对比平台
    Generrated
    Generrated汇集9300+张DALL·E生成图像及对应提示词,支持查看完整图集、对比DALL·E 2与3版本差异,是AI绘图新手学习Prompt设计与获取创作灵感的实用工具。
    71次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码