내 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
해결책을 찾을 수 없습니다. 자동 증가 숫자인 첫 번째 열을 null 문자로 바꾸고 싶습니다.
예
- 원래 라인:
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
이것은 행이 ASCII 이스케이프 시퀀스로 표시되는 작은 따옴표로 시작하고 첫 번째 항목을 바꾸는지 확인합니다 ( 그렇지 INSERT INTO
않으면 쉘 수준에서 잘못 해석됩니다). 다른 모든 줄은 변경되지 않고 인쇄됩니다.(<digit>,
(''
입력 파일은 기본적으로 수정되지 않으므로 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;
그런 다음 위의 내용이 작동하지 않는 경우를 포함하여 더 대표적인 입력/출력 예제를 표시하도록 질문을 편집하십시오.