📚 语法与核心选项
sed [选项] '脚本命令' 文件名
高频选项(记牢这 4 个就够了)
选项 | 作用 |
-n | 抑制默认输出,只显示处理结果 |
-e | 执行多条命令(可重复使用) |
-i | 原地修改文件(直接改原文件) |
-r/-E | 启用扩展正则(减少转义麻烦) |
💡 安全提示:使用 -i 时建议加备份后缀,比如 sed -i.bak 's/old/new/' file.txt,会自动生成 file.txt.bak 备份文件,修改错了也能恢复!
语法:s/匹配模式/替换内容/标志
g:全局替换
i:忽略大小写
1. 替换每行第一个"shanghai"为"SHANGHAI"
(下面为了演示方便没有加-i参数,为仅演示效果,如果直接修改源文件请加-i,重要文件注意备份或者使用-i.bak)
sed 's/shanghai/SHANGHAI/' 123.txt

2. 全局替换所有"wuhan"为"chongqing"
sed 's/wuhan/chongqing/g' 123.txt

3. 忽略大小写替换URL(适配http/HTTP)
sed 's/http/https/gi' links.txt

4. 替换第2次出现的"hello"为"HELLO"
sed 's/test/prod/2' ceshi.txt

1. 删除第3行
sed '3d' data.txt #前面加参数-i是直接在源文件修改

2. 删除空行(清理日志常用)
sed '/^$/d' data.txt

3. 删除所有注释行(以#开头)
sed '/^#/d' ceshi.txt

4. 删除包含"hello"的行
sed '/hello/d' ceshi.txt

(下面为了演示方便没有加-i参数,为仅演示效果,如果直接修改源文件请加-i,重要文件注意备份或者使用-i.bak)
1. 在第3行前插入注释
sed '3i\# 配置数据库连接' app.conf

2. 在匹配"[dbserver]"的行后追加端口配置
sed '/\[server\]/a\port = 8080' app.ini

3. 在最后一行追加版权信息
sed '$a\# 版权所有 © 2026' ceshi.txt

1. 只打印包含"ERROR"的行(日志排查神器)
sed -n '/error/p' mysqld.log

2. 打印第10-20行(截取文件片段)
sed -n '10,20p' mysqld.txt

3. 打印非注释行
sed -n '/^#/!p' vsftpd.confbak

sed 支持按行号、模式指定操作范围,灵活性拉满:
1. 第1-2行全局替换
sed '1,2s/a/D/g' 11.txt #将1-2行的a换成大写D

2. 从"abc"到"bcd"之间的行删除
sed '/abc/,/bcd/d' 11.txt

3. 第2行及后面2行替换
sed '2,+2s/ABc/ABC/' 11.txt #将第二行及后面2行中的ABc替换为ABC

4. 奇数行替换(1~2表示从第1行开始,步长2)
sed '1~2s/a/D/' l1.txt #将奇数行中的a替换为大写D
