spe*_*ndo 5 regex linux date sed
我用这个命令:
sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\(\r\?\)$/\1/' inputfile
Run Code Online (Sandbox Code Playgroud)
根据我的需要更改巨大的csv文件(请参阅每行末尾的删除';').
现在碰巧在某些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
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我认为{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'
Run Code Online (Sandbox Code Playgroud)
即:你必须从parens中删除反斜杠.
编辑:关于丹尼斯威廉姆森的评论,也可以通过逃避花括号使用常规正则表达式:
sed 's/;\([0-9]\{6\}\)00;/;\101;/g'
Run Code Online (Sandbox Code Playgroud)