sed 一条命令批量替换 SQL 文件路径

笔者在整理一批 Oracle 导入脚本时,遇到一个很常见的场景:多个 .sql 文件里都写死了同一个绝对路径,需要统一改成相对路径。手动逐个改太慢,用 sed 一条命令就能搞定。

01 | 先看清要改什么

先用 grep 确认问题范围:

bash 复制代码
grep -n "load_csv" *.sql

结果发现 11 个文件里,第 12 行都写着类似这样的绝对路径:

text 复制代码
LOAD DNMATERIALBINDDETAIL /Users/wanzheng/src/ontoForge/database/oracle/jylt/load_csv/DNMATERIALBINDDETAIL.csv

路径前缀完全一致,只有文件名不同。这种"前缀相同、批量替换"的场景,正是 sed 的强项。

02 | 一条命令完成替换

bash 复制代码
sed -i 's|/Users/wanzheng/src/ontoForge/database/oracle/jylt/load_csv/|../load_csv/|g' *.sql

执行后再用 grep 验证,所有文件都变成了相对路径:

text 复制代码
LOAD DNMATERIALBINDDETAIL ../load_csv/DNMATERIALBINDDETAIL.csv

03 | 命令拆解

-i:直接改原文件

-i 表示 In-place,替换结果直接写回原文件,不需要重定向或临时文件。注意它会覆盖原内容,执行前最好确认文件已纳入版本管理。

s|old|new|g:全局替换

s 是替换指令,g 表示一行内所有匹配都替换,而不是只换第一处。

这里特意用 | 作为分隔符,而不是常见的 /。因为路径里本身就有大量斜杠,用 / 做分隔符需要不断转义,可读性很差;换成 | 后整条命令一目了然。

*.sql:作用于所有匹配文件

sed 会依次处理当前目录下所有 .sql 文件,一次完成批量修改。

04 | 小结

面对"多个文件、同一段文本、批量替换"的需求,sed -i 配合合适的分隔符,往往一条命令就能解决。关键点有两个:先用 grep 确认范围,再用 | 避开路径斜杠带来的转义麻烦。

关注我,和AI一起成长~

相关推荐
狂龙骄子2 个月前
Linux文件批量操作技巧
sed·find·cp·mv·批量修改·批时查找
only_Klein7 个月前
Shell 三剑客
shell·sed·grep·awk
予枫的编程笔记7 个月前
【Linux进阶篇】从基础到实战:grep高亮、sed流编辑、awk分析,全场景覆盖
linux·sed·grep·awk·shell编程·文本处理三剑客·管道命令
Peterrrr09119 个月前
深入理解 Shell 编程:正则表达式与 sed 文本处理器
linux·运维·正则表达式·sed·linux命令
vortex51 年前
Shell脚本技巧:去除文件中字符串两端空白
linux·bash·shell·sed·awk
**AE86**1 年前
sed截取慢SQL大文件并导出指定时间范围内容
数据库·sql·sed
哈哈幸运1 年前
Linux Sed 深度解析:从日志清洗到 K8s 等12个高频场景
linux·运维·编辑器·sed
迷茫运维路2 年前
正则表达式基础知识及grep、sed、awk常用命令
linux·运维·正则表达式·sed·grep·awk
goodcitizen2 年前
导出 wireshark 网络包二进制数据的三种方法
wireshark·sed·xxd