[英]Why does this sed regex substitution not work?
我有一个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
与regex结合使用,但替换似乎使结果混乱。
具有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');
...
我究竟做错了什么?
您的输入可能有尾随空白,而(.*)
正在选择。 ([^[:space:]]*)
似乎有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.