繁体   English   中英

为什么此sed正则表达式替换无效?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM