文档首页> Linux命令> 蓝易云cdn:sed替换以某字符串开头的行

蓝易云cdn:sed替换以某字符串开头的行

发布时间:2026-02-14 00:19       

sed 替换“以某字符串开头”的整行内容 🔧

在 Linux 运维或批量配置修改场景中,经常需要替换以指定字符串开头的行
核心关键点只有一个:使用正则表达式的行首锚点 ^

^ 表示匹配“行的开始”。


一、基础替换写法(最常用)🚀

假设文件 config.txt 内容如下:

port=8080
host=127.0.0.1
port=9090

目标:把所有以 port= 开头的行改为:

port=80

命令如下:

sed -i 's/^port=.*/port=80/' config.txt

结构解析

  • s → 替换命令(substitute)
  • ^port= → 匹配以 port= 开头
  • .* → 匹配后面任意内容
  • port=80 → 替换成的新内容
  • -i → 直接修改原文件

这是最标准、最稳定的写法。


二、只替换第一次匹配的行 🎯

如果只想改第一条:

sed -i '0,/^port=/s//port=80/' config.txt

解释:

  • 0,/pattern/ 表示从文件开始到第一次匹配为止
  • 只替换首个匹配行

适合修改配置文件默认项。


三、带空格或缩进的情况 ⚠️

有些文件可能存在前导空格:

   port=8080

这时可以写:

sed -i 's/^[[:space:]]*port=.*/port=80/' config.txt

解释:

  • [[:space:]]* 匹配任意数量的空白字符
  • 更稳健,适用于格式不统一的文件

四、替换为动态变量内容 💡

如果要用变量:

NEW_PORT=8081
sed -i "s/^port=.*/port=${NEW_PORT}/" config.txt

注意:

  • 变量替换时必须用双引号
  • 单引号内变量不会展开

五、只打印不修改(调试模式)🔍

在正式执行前,可以先验证:

sed 's/^port=.*/port=80/' config.txt

不加 -i,只输出结果,不修改文件。
建议生产环境脚本中先测试。


六、工作原理说明 🧠

sed 逐行读取文件:

  1. 每次读取一行
  2. 判断是否匹配 ^指定字符串
  3. 若匹配则执行替换
  4. 输出处理后的行

因此:

  • ^ 是关键
  • .* 用于覆盖整行
  • 组合即实现“整行替换”

七、实战建议 📊

场景 推荐写法
普通配置替换 s/^key=.*/key=value/
存在缩进 ^[[:space:]]*key=
脚本变量 使用双引号
批量运维 先测试再 -i

总结

替换“以某字符串开头的行”本质就是:

^ + 目标字符串 + .* 

构造完整正则后,用 sed 的 s/// 执行替换即可。

掌握行首锚点 ^,你可以精准控制配置文件修改,不会误伤其他内容。🛡️