我使用这个命令:
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
但这不起作用。
答案 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'