VI如何替换每行前n个字符后出现的n个字符

时间:2014-10-21 15:44:42

标签: linux postgresql vi

我有一个用逗号分隔的数据集,如下所示。

882710454,122.00
883710414,122.00
888710514,122.00
888,710,414,122.00

但是,数据集中的特定行在每3个字符后出现逗号(上面的第4行检查),因此无法将数据导入postgres数据库。我想删除每3个字符后出现的逗号,并且只保留逗号作为有效分隔符。

请注意,我正在处理庞大的数据集,因此无法逐行删除逗号。我需要一个可以在vi或nano中执行此操作的全局命令。

请协助。

2 个答案:

答案 0 :(得分:2)

您需要在vi中使用正则表达式和全局查找和替换:

:%s/,\(\d\{3}\),/\1/g

说明:

  • %s用于搜索和替换
  • /启动搜索部分
  • ,\(\d\{3}\),匹配逗号+三个数字+逗号(\是转义字符)
  • /结束搜索部分,启动替换部分
  • \1匹配搜索部分中的三个数字
  • /结束替换部分
  • g用于全局替换(在整个文件中)

答案 1 :(得分:0)

VI:

:%s/^\([0-9]\{3\}\),\([0-9]\{3\}\),\([0-9]\{3\}\),/\1\2\3,/