我有多个包含 DDL 和 DML 的 .sql 文件。
1)在一组文件中有一个 DDL(创建表 ...),然后是一个 DML(合并到 ....),然后是一个 DDL(删除表 ...),如下所示:
CREATE TABLE T1 (col1 ...);
Merge into T2 using T1.....;
Drop table T1;
2)在第二组中,上述模式有多个重复:
CREATE TABLE T1 (col1 ...);
Merge into T2 using T1.....;
CREATE TABLE T3 (col1 ...);
Merge into T4 using T1 and T3.....;
Drop table T1;
Drop table T3;
我需要从每个源文件创建 2 个文件:一个包含所有 DDL,另一个包含所有 DML。我尝试过 sed 首先在 CREATE 和分号之间搜索并定向到 DDL 文件,然后在 Merge 和分号之间搜索并定向到 DML 文件,最后在 Drop 和分号之间搜索并附加到上面的 DDL 文件。
sed -n '/CREATE/,/;/p' $SRCFILE > $TGTDDLFILE
sed -n '/Merge/,/;/p' $SRCFILE > $TGTDMLFILE
sed -n '/Drop/,/;/p' $SRCFILE >> $TGTDDLFILE
它适用于第 1 组,但不适用于第 2 组。有没有一种方法可以缩放它以应用于每一次出现,以便它也涵盖第 2 组。如果没有,还有其他方法吗?
感谢你的帮助。谢谢