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オプションを使用して入力ファイルを直接変更できます。

おすすめ記事