SQL 덤프에서 ID를 null 문자로 바꾸십시오.

SQL 덤프에서 ID를 null 문자로 바꾸십시오.

내 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;

그런 다음 위의 내용이 작동하지 않는 경우를 포함하여 더 대표적인 입력/출력 예제를 표시하도록 질문을 편집하십시오.

관련 정보