将 id 替换为 sql 转储中的空字符

将 id 替换为 sql 转储中的空字符

我的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;

然后编辑您的问题以显示更具代表性的示例输入/输出,包括上述不起作用的情况。

相关内容