蓝易云cdn:sed替换以某字符串开头的行
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 逐行读取文件:
- 每次读取一行
- 判断是否匹配
^指定字符串 - 若匹配则执行替换
- 输出处理后的行
因此:
^是关键.*用于覆盖整行- 组合即实现“整行替换”
七、实战建议 📊
| 场景 | 推荐写法 |
|---|---|
| 普通配置替换 | s/^key=.*/key=value/ |
| 存在缩进 | ^[[:space:]]*key= |
| 脚本变量 | 使用双引号 |
| 批量运维 | 先测试再 -i |
总结
替换“以某字符串开头的行”本质就是:
^ + 目标字符串 + .*
构造完整正则后,用 sed 的 s/// 执行替换即可。
掌握行首锚点 ^,你可以精准控制配置文件修改,不会误伤其他内容。🛡️
已经是第一篇啦!