《每日一命令03:sed——批量替换从未如此简单》
📖 先唠两句
大家好啊,我是阿垚。
欢迎来到《每日一命令》第03期。
上期聊了awk——按列处理文本的神器。今天聊另一个文本处理三剑客之一:
sed
如果说grep是“找”,awk是“分析”,那sed就是“改”。
🤔 你是不是也这么干过?
要修改100个配置文件里的IP地址,一个个打开,一个个改?😫
要把一个2GB的SQL文件里的表名批量替换,编辑器直接卡死?
要删除文件中的所有空行或注释行,手动删到眼花?
这些场景,sed都能一行搞定。
🔧 sed是什么?
sed =Stream Editor(流式编辑器)。
核心特点:非交互式、批量处理、一行命令搞定全文修改。
你不用打开文件,不用手动翻页,不用一个个替换。sed直接在你的命令行里完成所有修改。
📝 最常用的5种姿势
1. 基础替换
bash
sed 's/旧文本/新文本/' file.txt
把每行第一个匹配的旧文本换成新文本。
2. 全局替换(整行所有匹配)
bash
sed 's/旧文本/新文本/g' file.txt
加g(global),替换一行中所有匹配的文本。
3. 直接修改文件(危险!)
bash
sed -i 's/旧文本/新文本/g' file.txt
-i表示直接修改原文件。⚠️强烈建议先备份!
4. 只修改指定行
bash
sed '3,5s/旧/新/g' file.txt
只修改第3到第5行。
5. 删除行
bash
sed '/匹配内容/d' file.txt
删除包含指定内容的行。比如删除所有空行:
bash
sed '/^$/d' file.txt
🚀 进阶技巧(高手必看)
替换并自动备份
bash
sed -i.bak 's/旧/新/g' file.txt
修改前自动生成file.txt.bak备份文件。强烈推荐!✨
一次执行多个替换
bash
sed -e 's/旧1/新1/g' -e 's/旧2/新2/g' file.txt
使用其他分隔符
bash
sed 's|/旧路径/|/新路径/|g' file.txt
当替换内容包含/时,可以用|或#做分隔符,避免转义。
在文件开头/末尾添加内容
bash
sed -i '1i\第一行内容' file.txt # 开头 sed -i '$a\最后一行内容' file.txt # 末尾
💡 真实场景
场景1:批量修改Nginx配置中的IP
bash
sed -i 's/192.168.1.100/10.0.0.1/g' /etc/nginx/conf.d/*.conf
一条命令改完所有配置文件。🎉
场景2:删除配置文件中的注释行
bash
sed -i '/^#/d' config.ini
场景3:给SQL文件中的表名加前缀
bash
sed -i 's/user/tmp_user/g' dump.sql
场景4:把日志文件中的日期格式从2026-04-16改为20260416
bash
sed -i 's/-//g' log.txt
⚠️ 小贴士
| 参数 | 含义 | 使用场景 |
|---|---|---|
s/旧/新/ | 替换 | 最常用 |
g | 全局替换 | 一行中多次匹配 |
-i | 直接修改文件 | 正式修改(先备份!) |
-i.bak | 修改并备份 | 推荐写法 |
数字 | 指定行范围 | 只改某几行 |
d | 删除行 | 删除空行或注释 |
1i/$a | 首行插入/末尾追加 | 添加内容 |
🔜 下期预告
《每日一命令04:find——文件查找你只知道用find . -name?》
评论区分享你最常用的sed命令。(•̀ᴗ•́)و
——阿垚,一个踩过2万次坑的“老”IT
