人人都会AI编程

5.3 文件内容修改与替换

更新时间:2026-06-28

实际工作中,经常需要批量修改配置文件、日志清洗或代码重构。本节介绍几种无需打开编辑器即可完成替换的方法。

1. 基础替换(sed)

场景:快速修改配置文件中的某个参数值。

# 将 config.txt 中的 "localhost" 替换为 "127.0.0.1"
sed 's/localhost/127.0.0.1/g' config.txt

# 直接修改原文件(-i 参数),并自动备份(.bak)
sed -i.bak 's/localhost/127.0.0.1/g' config.txt

注意:Mac 系统需要加空字符串 sed -i '' 's/old/new/g' file

2. 正则匹配替换

场景:批量修改 IP 地址端口号或日期格式。

# 将 192.168.1.xxx 改为 10.0.0.xxx
sed -E 's/192\.168\.1\.([0-9]+)/10.0.0.\1/g' hosts.txt

# 删除行首空格(代码格式化)
sed 's/^[ \t]*//g' code.py

3. 指定行范围替换

场景:只修改配置文件的特定段落。

# 仅修改第 10-20 行中的内容
sed '10,20s/development/production/g' config.ini

# 删除包含 "test" 的行
sed '/test/d' file.txt

4. 多文件批量处理

场景:项目里批量修改版权年份或 API 地址。

# 批量替换当前目录所有 .conf 文件
sed -i 's/2023/2024/g' *.conf

# 递归替换(配合 find,Mac 需用 gsed)
find . -name "*.java" -exec sed -i 's/System.out.print/Log.info/g' {} \;

5. 使用 awk 进行复杂替换

场景:需要根据列内容判断后再替换。

# 将第三列大于 100 的行的状态改为 "HIGH"
awk '{if($3>100) gsub(/NORMAL/,"HIGH"); print}' data.csv > tmp && mv tmp data.csv

6. 实用技巧与避坑

预览模式:先不加 -i 查看效果,确认无误后再执行。

特殊字符转义

# 替换路径时,用 # 代替 / 作为分隔符,避免转义
sed 's#/usr/local#/opt/apps#g' path.conf

# 或转义斜杠
sed 's/\/usr\/local/\/opt\/apps/g' path.conf

空文件检查

# 确保文件非空再处理,避免误删
[ -s file.txt ] && sed -i 's/old/new/g' file.txt

权限问题:修改系统配置文件时,使用 sudo sed 而非 sed 后加 sudo mv

小结

  • 简单替换用 sed -i 's/old/new/g'
  • 复杂逻辑用 awk
  • 大批量文件用 find + sed 组合
  • 生产环境操作前务必备份或使用版本控制