使用sed更改数字的最后两位数字

时间:2011-03-15 09:43:53

标签: regex linux date sed

我使用这个命令:

sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\(\r\?\)$/\1/' inputfile

将巨大的csv文件更改为我的需求(参见delete ';' at the end of each line)。

现在碰巧在某些csv文件中有像20000500这样的“假想日期”由于最后两个零而无法导入到SQL(日期不可能)。

如何编辑我的sed-command以便在这种情况下始终将最后两位数字更改为01(我的意思是只有它们是00)?

我试过

sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\([0-9]{6}\)00;/;\101;/g;s/;\(\r\?\)$/\1/' inputfile

但这不起作用。

1 个答案:

答案 0 :(得分:6)

我认为{6}是一个扩展的正则表达式。因此,您必须使用sed -r或将正则表达式更改为s/;\([0-9][0-9][0-9][0-9][0-9][0-9]\)00;/;\101;/g

如果要使用扩展正则表达式,请执行:

sed -r 's/;([0-9]{6})00;/;\101;/g'

即:你必须从parens中删除反斜杠。

编辑:关于丹尼斯威廉姆森的评论,也可以通过逃避大括号来使用常规正则表达式:

sed 's/;\([0-9]\{6\}\)00;/;\101;/g'