查找模式并替换PLUS操作?

时间:2014-08-21 14:59:17

标签: csv vim notepad++ delimiter

这是否可以在正则表达式?假设我有这些条目:

1005,15,0,0,0 1014,20,0,0,0 1084,3,360000,180000,1 1025,5,0,0,0

我应该拥有的是,找到一个在它之前有逗号的数字&完全,0,0,0之后,将数字替换为其数字的140%

1005,15*1.4,0,0,0 1014,20*1.4,0,0,0 1084,3,360000,180000,1 1025,1*1.4,0,0,0

如果它有小数点,将其向上舍入1,并删除小数点,以便:

1025,1,0,0,0 => 1025,2,0,0,0

决赛应该是,如:

1005,21,0,0,0 1014,28,0,0,0 1084,3,360000,180000,1 1025,2,0,0,0

有人可以带我到正确的正则表达式查找和替换吗?

谢谢!

编辑:弄清楚正则表达式无法做到这一点,那么任何可以帮助我的工具呢?

2 个答案:

答案 0 :(得分:5)

首先,我没有Windows系统。要使用vim打开文件,我想它应该与vim foo.file相同?

无论如何,回到你的问题,命令是:

:%s/\d\+\ze,0,0,0$/\=float2nr(ceil(submatch(0)*1.4))/

它的工作原理如下:

enter image description here

请注意,我添加了一个新行来显示ceil()的工作原理。

如果这是你第一次打开vim,你需要阅读一些教程。如果您有使用vim的经验,可以查看以下cmd的以下帮助详细信息:

:h :s
:h \ze
:h ceil(
:h submatch(
:h float2nr(

答案 1 :(得分:1)

这是一个执行工作的perl one liner:

perl -p -i.back -e "s/,(\d+)((?:,0){3})/','.(1.4*$1).$2/e"  foo.txt

这将按需要替换,之后的每个数字,然后将,0,0,0后面的数字乘以1.4

在替换值之前,原始文件保存在filename.back中。

修改
如果你想要对结果进行舍入(即没有小数),你可以这样做:

perl -p -i.back -e "s/,(\d+)((?:,0){3})/','.sprintf('%d',(1.4*$1)).$2/e"  foo.txt