【发布时间】:2013-07-14 13:36:59
【问题描述】:
f1,f2,f3,f4,f5,,,,
f1,f2,f3,f4,f5,,,,
f1,f2,f3,f4,f5,,,,
f1,f2,f3,f4,f5,,,,
假设 fN 是一些字符序列,除了,。
如何删除前 3 个字段?
到目前为止,我已经尝试过%s/^.*,.*,.*,//,但它删除了整行。
【问题讨论】:
f1,f2,f3,f4,f5,,,,
f1,f2,f3,f4,f5,,,,
f1,f2,f3,f4,f5,,,,
f1,f2,f3,f4,f5,,,,
假设 fN 是一些字符序列,除了,。
如何删除前 3 个字段?
到目前为止,我已经尝试过%s/^.*,.*,.*,//,但它删除了整行。
【问题讨论】:
假设您的光标位于第一行第一列。字段也具有相同的宽度(如您的示例所示)
您可以按以下按键顺序(6 次击键):
<Ctrl-V>G3f,x
如果字段的长度不同,您可以:
用q录制宏:
qq0v3f,xjq
然后,重播宏,例如,99 次:
99@q
或在命令行中执行:
%s/\v^([^,]*,){3}//
【讨论】:
\v 的含义吗?
您可以使用cut,使用分隔符选项d,(设置,作为分隔符),然后选择您想要的-f4-(从4到结尾的所有字段...)
【讨论】:
问题在于* 修饰符是贪婪的,即它匹配所有可以得到的字符。
将值限制为任何字符逗号分隔符除外:[^,]:
:%s/^\([^,]*,\)\{3}//
或使用非贪婪变体.\{-}:
:%s/^\(.\{-},\)\{3}//
对于逗号分隔值 (CSV) 文件处理,您可能还对 csv.vim plugin 感兴趣,它提供了 :DeleteColumn 命令。
【讨论】: