使用正则表达式和sed将多个INSERT语句合并为一个

时间:2019-06-20 14:17:14

标签: sql regex bash sed

给出这种sql脚本:

INSERT INTO a_table (field_1, field_2) VALUES (value_1, value_2);
INSERT INTO a_table (field_1, field_2) VALUES (value_3, value_4);
INSERT INTO a_table (field_1, field_2) VALUES (value_5, value_6);

INSERT INTO another_table (field_3, field_4) VALUES (value_7, value_8);
INSERT INTO another_table (field_3, field_4) VALUES (value_9, value_10);

我试图将同一张表上的插入内容合并为一个这样的INSERT:

INSERT INTO a_table (field_1, field_2) VALUES (value_1, value_2), (value_3, value_4), (value_5, value_6);

INSERT INTO another_table (field_3, field_4) VALUES (value_7, value_8), (value_9, value_10);

所以基本上,我尝试替换与正则表达式匹配的每个表达式:

;\nINSERT INTO .* \(.*\) VALUES (\(.*\))

但是在下一个命令中使用sed似乎没有任何匹配:

sed 's/;\nINSERT INTO .* \(.*\) VALUES (\(.*\))/, \1/g'

here时,我可以清楚地看到匹配是正确的,并且我正在寻找的组被正确捕获。我错过了什么?

编辑:多亏了WiktorStribiżew,正确的命令是:

sed -Ez 's/;\nINSERT INTO .* \(.*\) VALUES (\(.*\))/, \1/gm'

0 个答案:

没有答案