用 sed 快速批量替换文本:从简单替换到原地改文件

举报
yd_28502004 发表于 2026/11/04 06:21:31 2026/11/04
【摘要】 在 Linux 服务器上改配置,最怕的就是一个个文件手动打开、逐行替换。sed 是专门做流式文本替换的工具,一行命令就能批量改完,还能先预览、确认无误再落盘,是运维和开发都值得掌握的基本功。最常见的用法是替换。sed 's/旧内容/新内容/' file 只替换每行第一次出现的地方;加上 g 标志,sed 's/旧内容/新内容/g' file 才会替换一行里的全部出现。默认情况下 sed 只是...

在 Linux 服务器上改配置,最怕的就是一个个文件手动打开、逐行替换。sed 是专门做流式文本替换的工具,一行命令就能批量改完,还能先预览、确认无误再落盘,是运维和开发都值得掌握的基本功。

最常见的用法是替换。sed 's/旧内容/新内容/' file 只替换每行第一次出现的地方;加上 g 标志,sed 's/旧内容/新内容/g' file 才会替换一行里的全部出现。默认情况下 sed 只是把结果打印到屏幕,并不会改原文件,这正是它安全的地方:先看输出,确认替换结果符合预期,再决定是否写入。

确认无误后,用 -i 选项做原地修改:sed -i 's/旧内容/新内容/g' file。改重要配置文件之前,建议先加备份后缀,例如 sed -i.bak 's/旧内容/新内容/g' nginx.conf,这样原文件会自动存为 nginx.conf.bak,改错了也能立刻恢复。这个习惯在生产环境尤其重要,不要等到改坏了才后悔没有备份。

分隔符不一定非用斜杠。当要替换的内容本身含有斜杠(比如路径 /var/www/html)时,写成 s/旧/新/ 会满是转义符,很容易看错。sed 允许换分隔符,例如 sed 's|/var/www/html|/srv/www|g' file,用竖线代替斜杠,命令立刻清爽很多。分隔符可以是 #、@、| 等,选一个内容里不出现的字符即可。

按行号限定范围也很实用。sed '2s/旧/新/' file 只改第 2 行;sed '10,20s/旧/新/g' file 只改第 10 到 20 行。结合地址匹配,还能只在包含某个关键字的行里替换:sed '/error/s/旧/新/g' file。范围越小,误伤的可能性越低。

删除行同样简单。sed '/关键字/d' file 会删掉所有包含关键字的行;sed '1d' file 删首行。删除和替换一样,默认不改原文件,确认后再加 -i。

最后提醒两点避坑经验。第一,替换内容里如果有 & 符号,sed 会把它理解为“整个匹配到的原文”,想写字面 & 需要转义成 \&。第二,批量改多个文件时可以用通配符,例如 sed -i 's/旧/新/g' *.conf,但改之前务必先用不带 -i 的版本在一两个文件上预览结果。

总结一下工作流:先不带 -i 预览、确认范围和结果、加 .bak 备份再原地修改、改完用 grep 或 diff 复核。掌握这套流程,批量改配置就不再是提心吊胆的手工活,而是一条命令就能放心执行的操作。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。