给出这种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'