每天处理日志、配置文件或者代码时,总免不了要批量修改某些文字。比如把旧的API地址换成新的,或者统一调整项目里的变量名。手动一个一个改?太慢了,还容易出错。这时候,写个简单的bash脚本做文本替换,几分钟就能干完原本半小时的活。
用sed实现基础替换
bash里最常用的文本替换工具是 sed。它的基本语法很简单,比如要把文件中所有的 old-domain.com 换成 new-domain.com,命令是:
sed -i 's/old-domain.com/new-domain.com/g' config.txt
这里的 -i 表示直接修改原文件,s 是替换操作,后面的 g 代表全局替换,避免一行里只改第一个匹配项。
批量处理多个文件
如果项目里有几十个 .conf 文件都要改,可以结合 find 和 sed 一起用:
find /path/to/configs -name "*.conf" -exec sed -i 's/db_host/db-server-new/g' {} \;
这条命令会自动查找指定目录下所有以 .conf 结尾的文件,并把里面的 db_host 替换为 db-server-new。以后换服务器地址再也不用手抖复制粘贴了。
带变量的动态替换
有时候替换内容不是固定的。比如你要根据不同环境生成对应的配置,可以用变量来动态处理:
OLD_URL="dev.api.com"
NEW_URL="prod.api.com"
sed -i "s/$OLD_URL/$NEW_URL/g" app.conf
注意这里用了双引号,这样才能让变量展开。单引号会把它当纯文本,变量就失效了。
小心特殊字符
如果要替换的内容包含斜杠(/),比如URL,可以直接换分隔符避免转义混乱。用 # 当分隔符更清爽:
sed -i 's#https://old.cdn.com/assets#https://new.cdn.com/static#g' index.html
这样就不用写一堆 \/<\/,看起来清楚多了。
先预览再修改
直接改文件有风险,特别是系统配置。建议先去掉 -i 参数看看效果:
sed 's/test_/prod_/g' settings.ini
屏幕上输出的是修改后的内容,原文件不动。确认没问题再加 -i 执行真正替换。
组合成小工具脚本
把常用操作打包成脚本,以后直接运行就行。比如建个 switch-env.sh:
#!/bin/bash
# 切换到生产环境配置
sed -i 's/debug = true/debug = false/g' app.conf
sed -i 's/db.dev/db.prod/g' app.conf
echo "环境切换完成"
给它执行权限:chmod +x switch-env.sh,之后每次运行 ./switch-env.sh 就一键完成配置更新。
这种小脚本看着不起眼,但在重复任务里能省下大量注意力。别小看几行命令,它们才是日常效率的真实助力。