Vim golf:修复损坏的 CSV

Vim golf:修复损坏的 CSV

我有一个很大的 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。最后,替换命令用第一个匹配替换这两个匹配,然后用引号括起来的第二个匹配替换这两个匹配。

相关内容