我的sqldump是这样的
LOCK TABLES `mytable` WRITE;
/*!40000 ALTER TABLE `mytable` DISABLE KEYS */;
INSERT INTO `mytable` VALUES (8118,0,'E4B62B0A-8FFD-4FB9-A7A6-310D0A023426',NULL,'34F1E16B-5095-4BB1-AF6A-9236D73BE7CD','34F1E16B-5095-4BB1-AF6A-9236D73BE7CD',NULL,'file','88201019',NULL,88201019,'/Nextcloud.png',19,1705051444,1,'2024-04-11 00:00:00',NULL,0,NULL,0,'Partage de test',0,NULL,NULL,NULL);
INSERT INTO `mytable` VALUES (8119,0,'E4B62B0A-8FFD-4FB9-A7A6-310D0A023426',NULL,'34F1E16B-5095-4BB1-AF6A-9236D73BE7CD','34F1E16B-5095-4BB1-AF6A-9236D73BE7CD',NULL,'file','63376796',NULL,63376796,'/Readme (2).md',19,1705051504,1,NULL,NULL,0,NULL,0,'Partage de test sur le groupfolders',0,NULL,NULL,NULL);
/*!40000 ALTER TABLE `mytable` ENABLE KEYS */;
UNLOCK TABLES;
在这个文件中,我有一些事情sed
要做,但我找不到解决方案。我想用空字符替换作为自动增量数字的第一列:
示例
- 原线:
INSERT INTO `mytable` VALUES (8118
- 期望的结果:
INSERT INTO `mytable` VALUES (''
在所有以INSERT INTO ...
答案1
如果awk
是一个选项,以下程序应该执行以下操作:
awk 'index($0,"INSERT INTO")==1{sub(/\([[:digit:]]+,/,"(\047\047,")} 1' input.dump
这将检查一行是否以 开头INSERT INTO
,并用 替换第一次出现的内容(<digit>,
,(''
其中单引号通过 ASCII 转义序列表示(否则它们将在 shell 级别被误解)。所有其他行打印不变。
由于awk
默认情况下不会修改输入文件,因此您必须重定向到临时输出文件并重命名,或者(如果您的awk
实现支持)使用-i inplace
直接修改选项。
如果必须是sed
,那么以下应该有效:
sed -E '/^INSERT INTO/s/\([[:digit:]]+,/('\'\'',/' input.dump
在这里,您可以使用该-i
选项直接修改输入文件。
答案2
如果使用任何 sed 这还不是您所需要的:
$ sed "s/([^,]*/(''/" file
LOCK TABLES `mytable` WRITE;
/*!40000 ALTER TABLE `mytable` DISABLE KEYS */;
INSERT INTO `mytable` VALUES ('',0,'E4B62B0A-8FFD-4FB9-A7A6-310D0A023426',NULL,'34F1E16B-5095-4BB1-AF6A-9236D73BE7CD','34F1E16B-5095-4BB1-AF6A-9236D73BE7CD',NULL,'file','88201019',NULL,88201019,'/Nextcloud.png',19,1705051444,1,'2024-04-11 00:00:00',NULL,0,NULL,0,'Partage de test',0,NULL,NULL,NULL);
INSERT INTO `mytable` VALUES ('',0,'E4B62B0A-8FFD-4FB9-A7A6-310D0A023426',NULL,'34F1E16B-5095-4BB1-AF6A-9236D73BE7CD','34F1E16B-5095-4BB1-AF6A-9236D73BE7CD',NULL,'file','63376796',NULL,63376796,'/Readme (2).md',19,1705051504,1,NULL,NULL,0,NULL,0,'Partage de test sur le groupfolders',0,NULL,NULL,NULL);
/*!40000 ALTER TABLE `mytable` ENABLE KEYS */;
UNLOCK TABLES;
然后编辑您的问题以显示更具代表性的示例输入/输出,包括上述不起作用的情况。