Vim用相同格式的字符串替换字符串但名称不同

时间:2018-10-10 02:42:13

标签: vim vi substitution

文件如下:

INSERT INTO x VALUES (48394, '9-10-2007', 19);
INSERT INTO x VALUES (99981, '3-5-2008', 45);

我想将每行替换为:

INSERT INTO x VALUES (48394, STR_TO_DATE('9-10-2007', %d-%m-%y), 19);
INSERT INTO x VALUES (99981, STR_TO_DATE('3-5-2008', %d-%m-%y), 45);

我似乎找不到如何处理更改的字符串名称来替换

:%s/<WHAT GOES HERE>/add in STR_TO_DATE(...)/

2 个答案:

答案 0 :(得分:1)

这是一个解决方案的示例: :%s/\(INSERT INTO x VALUES (.*,\) '\(.*\)'\(.*\)/\1 STR_TO_DATE('\2', %d-%m-%y)\3/g

Relevant reading

答案 1 :(得分:1)

如果您的数据结构完全一样,没有其他用'分隔的字符串,并且内容始终是您要转换的日期,那么只需搜索'.*'即可:

:%s/'.*'/STR_TO_DATE(&, %d-%m-%y)

更具体地说,即是否其他字符串出现在同一行:

:%s/'\d*-\d*-\d*'/STR_TO_DATE(&, %d-%m-%y)