首页 > 解决方案 > 在vim中替换匹配分隔符内的单个字符

问题描述

我有一个 csv 文件,其中一些单元格包含,"...". 我只需要将引号之间的逗号更改为分号,而无需替换行上的其余逗号。也就是说,我有这样的事情:

x,"y,z",a

y并且只有和之间的逗号z应该替换为;。这应该如何在vim中完成?

标签: vim

解决方案


对于每行一对引号,您可以使用:

%s/\v("[^"]*)@<=,(.*")@=/;/g

输入:

x,"y,z,a",b

输出:

x,"y;z;a",b

对于每行不止一对引号,您可以使用以下 awk 命令:

:!awk -F'"' -v OFS='"' '{ for (i=2; i<=NF; i+=2) gsub(",", ";", $i) } 1' infile > outfile

此命令基于Unix StackExchange中的一个问题。它会将引号设置"为字段分隔符,并使用 . 在每个其他字段中替换逗号gsub


推荐阅读