我有一个文本文件,我试图设置导入到我的数据库中。我需要删除行上某个位置后每行的所有内容。我还需要在每行上的多个固定位置插入逗号。最终目标是一个csv文件,我将导入我的数据库。
我假设有一个正则表达式或VIM命令可以按位置插入删除,但我对两者都很新,而且我的搜索没有提供好的答案。
答案 0 :(得分:9)
Vim有一个特殊的正则表达式原子\%23c
,在第23列匹配。您也可以在之前和之后匹配,请参阅:help /\%c
。有了这个,您可以通过:substitute
实现目标:删除位置115后的所有字符:
:%s/\%>115c.*//
在10,20,30位置插入逗号:
:%s/\%10c\|\%20c\|\%30c/,/g
这是因为匹配本身是零宽度,即它不消耗该位置的字符。为此,您需要附加.
。
请注意,\%c
原子适用于字符(确切地说是字节计数)。要正确处理多字节和双宽字符,Tabs等,您可能最好将其基于屏幕宽度:\%v
是原子。