脚本

脚本

我需要让这个 PCRE 正则表达式在 sed 上运行:

(\)\;\s)(INSERT INTO )\`(.*)\` VALUES \(

可用的工作示例这里

谢谢,

答案1

尝试这个:

sed -E 's/();\s)(插入 )`(.*)` 值 (/),\n(/gm;t;d' <<< "插入table值 (1,'something');

答案2

解决了!我使用了 -z 选项,它确实起到了作用,甚至使模式匹配更短。

带有 stdin 和 stdout 示例的 Shell 脚本可在IDE一,为了完整起见,下面提供了一份副本。

脚本

#!/bin/sh
sed -zE 's/\)\;\nINSERT INTO `(.*)` VALUES \(/),\n(/gm;'

注意:需要更高版本的 sed,已使用 4.7 进行测试,显然 -z 也适用于 4.2

示例 stdin(来自 mysqldump --skip-extended-insert 的 .sql 转储)

INSERT INTO `table` VALUES (1,'something');
INSERT INTO `table` VALUES (2,'anything');
INSERT INTO `table` VALUES (3,'everything');
INSERT INTO `table` VALUES (4,'everything');
INSERT INTO `table` VALUES (5,'everything');
INSERT INTO `table` VALUES (6,'everything');
INSERT INTO `table` VALUES (7,'everything');

示例 stdout

.sql 转储已转换为多行 --extended-insert,尽管多年来多次请求,但目前 mysqldump 尚不支持

INSERT INTO `table` VALUES (1,'something'),
(2,'anything'),
(3,'everything'),
(4,'everything'),
(5,'everything'),
(6,'everything'),
(7,'everything');

希望这可以帮助。

亲切的问候,

相关内容