You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Sed复制并修改SQL文件中的同义词创建语句?

使用sed批量修改SQL语句的解决方案

当然可以用sed快速搞定这个需求!下面是具体的实现命令和详细解释:

核心sed命令

sed 's/EXECUTE IMMEDIATE '\''CREATE OR REPLACE PUBLIC SYNONYM '\'' || myTable || '\'' FOR SCHEMA1.'\'' || myTable;/EXECUTE IMMEDIATE '\''CREATE OR REPLACE SYNONYM SCHEMA2.'\'' || myTable || '\'' FOR SCHEMA1.'\'' || myTable;\
EXECUTE IMMEDIATE '\''CREATE OR REPLACE SYNONYM SCHEMA3.'\'' || myTable || '\'' FOR SCHEMA1.'\'' || myTable;/' myTable.sql

如果需要直接修改原文件并生成备份(推荐,防止误操作),可以加上-i参数:

sed -i.bak 's/EXECUTE IMMEDIATE '\''CREATE OR REPLACE PUBLIC SYNONYM '\'' || myTable || '\'' FOR SCHEMA1.'\'' || myTable;/EXECUTE IMMEDIATE '\''CREATE OR REPLACE SYNONYM SCHEMA2.'\'' || myTable || '\'' FOR SCHEMA1.'\'' || myTable;\
EXECUTE IMMEDIATE '\''CREATE OR REPLACE SYNONYM SCHEMA3.'\'' || myTable || '\'' FOR SCHEMA1.'\'' || myTable;/' myTable.sql

执行后会生成myTable.sql.bak备份文件,原文件myTable.sql会被自动更新。

命令细节解释

  1. 替换逻辑s/原内容/新内容/是sed的核心替换指令,这里我们精准匹配原SQL语句的完整文本。
  2. 单引号转义:bash环境中单引号字符串内的单引号需要用'\''转义(逻辑是:关闭当前单引号 → 输出一个单引号 → 重新打开单引号),所以你会看到命令里有不少这类转义组合。
  3. 生成两行语句:在替换内容里,用行尾的\表示换行,这样sed会把原单行语句替换成两行目标语句——同时去掉了原语句的PUBLIC关键字,分别加上SCHEMA2.SCHEMA3.的前缀。

效果验证

假设原文件myTable.sql中有这一行:

EXECUTE IMMEDIATE 'CREATE OR REPLACE PUBLIC SYNONYM ' || myTable || ' FOR SCHEMA1.' || myTable;

执行sed命令后,该行会被替换为:

EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM SCHEMA2.' || myTable || ' FOR SCHEMA1.' || myTable;
EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM SCHEMA3.' || myTable || ' FOR SCHEMA1.' || myTable;

内容的提问来源于stack exchange,提问作者Mildju

火山引擎 最新活动