用bash脚本快速搞定文本替换,省时又省力

每天处理日志、配置文件或者代码时,总免不了要批量修改某些文字。比如把旧的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 文件都要改,可以结合 findsed 一起用:

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 就一键完成配置更新。

这种小脚本看着不起眼,但在重复任务里能省下大量注意力。别小看几行命令,它们才是日常效率的真实助力。