如何在VIM中双引号之间替换“,”

时间:2013-10-20 16:41:03

标签: vim

我有一个CSV文件,数据是这样的:

"asdd","12","good"

但是有些数据没有规范,比如

"name1,name2","34","bad"

如何更换','双引号之间的另一个(例如' |'或' - '等)?

ADD:文件大小几乎达到40M。

4 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,那么以下命令应解决问题

:%s/\v([^"]),([^"])/\1-\2/g

它将,替换为"未包围的所有-

这里假设所有csv数据都被"

包围

示例输入:

"name1,name2","34","bad"
"asdd","12","good"
"name1,name2,name3","34","bad"

输出:

"name1-name2","34","bad"
"asdd","12","good"
"name1-name2-name3","34","bad"

答案 1 :(得分:1)

试试这一行:

%s/[^"]\zs,\ze[^"]/-/g

如果你想在,之前和之后处理(删除)空格,例如:

"name1,   name2","34","bad"
"asdd","12","good"
"name1,  name2  ,name3","34","bad"

你可以执行:

%s/[^"]\zs\s*,\s*\ze[^"]/-/g

它会将上面的例子改为:

"name1-name2","34","bad"
"asdd","12","good"
"name1-name2-name3","34","bad"

答案 2 :(得分:1)

您可以使用我的csv plugin。它提供了许多使用CSV文件的可能性。在您的情况下,您只需使用:NewDelimiter |使|成为新的分隔符。

答案 3 :(得分:0)

命令:

:s/","/"|"/g

将使用“|”

替换文档中的每个“,”

这会改变:

"Hello","world","foo,bar"

"Hello"|"world"|"foo,bar"