我有一个包含2590万个字符的行,其中约240万个是逗号,我想从该行中删除所有逗号。
如果我使用命令sqrt
,它会构造一个正则表达式,该正则表达式会在行上重复运行,直到没有逗号为止。根据经验测算,这似乎需要O(n ^ 2)的时间。因此,我的正则表达式在这一行上运行了一个多小时。
使用宏不好,因为会发生重绘,当您处在这么长的行的中间时,重绘往往会有些昂贵。
分割行似乎是最好的选择,但是由于文件的结构,我需要创建一个新的缓冲区来干净地做到这一点。
是的,有很多更好的方法来输出不包含具有可笑列数的CSV数据的大量数据,让我们假设我没有生成它,但是我有它,并且必须使用它。
是否有一种渐近快速的方法可以简单地从vim中的一行中删除每次出现的特定字符?
答案 0 :(得分:1)
作为文本编辑器,Vim不适合用于这种病理格式化的文件(如您所知)。
正如其他人已经评论过的那样,tr
是删除逗号的不错选择。在外部:
$ tr -d , input.txt
或在Vim内部:
:.! tr -d ,
Vim还具有内置的低级功能:help tr()
。不幸的是,它不处理删除,仅处理转换。您可以使用它在当前行中将逗号更改为分号,如下所示:
:call setline('.', tr(getline('.'), ',', ';'))