我有一个ID为ID的文件,我想为其创建数据库INSERT。
我要使用的SQL:INSERT INTO docstore.migratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), 'id_from_file', now(), 'HERC-742');
我在正则表达式中使用sed
,但是替换似乎使结果混乱。
具有ID的文件:
$ cat object_ids_01.sql
09ab41308002760e
09ab41308002760f
09ab413080027610
09ab413080027611
...
当我运行此命令时:
$ sed -E "s/(.*)/INSERT INTO docstore.migratie_dms \(id, document_id, creatiedatum, gebruiker\) VALUES \(uuid_generate_v4\(\), \'\1\', now\(\), \'HERC-742\'\);/" object_ids_01.sql > output.sql
我得到这些结果:
$ cat output.sql
', now(), 'HERC-742');igratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), '09ab41308002760e
', now(), 'HERC-742');igratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), '09ab41308002760f
', now(), 'HERC-742');igratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), '09ab413080027610
', now(), 'HERC-742');igratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), '09ab413080027611
...
似乎\1
有问题,因为当我用常量字符串替换它时,会得到不错的INSERT:
$ sed -E "s/(.*)/INSERT INTO docstore.migratie_dms \(id, document_id, creatiedatum, gebruiker\) VALUES \(uuid_generate_v4\(\), \'xxxxxx\', now\(\), \'HERC-742\'\);/" object_ids_01.sql > output.sql
$ cat output.sql
INSERT INTO docstore.migratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), 'xxxxxx', now(), 'HERC-742');
INSERT INTO docstore.migratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), 'xxxxxx', now(), 'HERC-742');
INSERT INTO docstore.migratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), 'xxxxxx', now(), 'HERC-742');
INSERT INTO docstore.migratie_dms (id, document_id, creatiedatum, gebruiker) VALUES (uuid_generate_v4(), 'xxxxxx', now(), 'HERC-742');
...
我在做什么错了?
答案 0 :(得分:1)
您的输入可能有(.*)
正在选择的尾随空白。 ([^[:space:]]*)
似乎有用。