我有一个很大的 CSV 文件,它应该有两个字段。它基本上应该看起来像这样:
1234, Some series of words
539345, Something else
2039, "quotes are, of course, necessary here"
问题是第 3 行的引号丢失了,而且有很多这样的行。我录制了一个宏来执行以下操作:
- 转到行首
- 移动到第一个逗号后面的位置
- 插入引号
- 转到行尾
- 附加引号
但是,即使有了这个宏,我也必须手动扫描整个文件,并在有多个逗号的行上播放。我无法对每一行都这样做,因为这不是有效的 CSV。
我想要的是替换命令说的是:“对于包含多个逗号的行,在第一个逗号后放置一个引号,并在行尾放置一个引号。”
有人想尝试一下吗?
答案1
这是一个较短的命令,没有任何捕获组。它用于&
重复上一个匹配。有两个命令以 分隔|
。第一个命令在第一个“,”及其后的空格(如果有)后添加引号。第二个命令在行尾添加引号。
:g/,.*,/s/, */&"/|s/$/"/
答案2
当然。
:g/,.*,/s/\(, *\)\(.*\)/\1"\2"/
搜索g/,.*,/
包含至少两个逗号的任何行。替换命令搜索逗号后跟零个或多个空格,并将其放入匹配缓冲区 #1,然后将行上的所有其他内容放入匹配缓冲区 #2。最后,替换命令用第一个匹配替换这两个匹配,然后用引号括起来的第二个匹配替换这两个匹配。