I use this command:
sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\(\r\?\)$/\1/' inputfile
to change huge csv-files to my needs (see delete ';' at the end of each line).
Now it happens that in some csv-files there are "fictive dates" like 20000500 that can't be imported to SQL because of the last two zeros (that are not possible for dates).
How can I edit my sed-command to alwa开发者_运维知识库ys change the last two digits to 01 in such cases (I mean only if they are 00)?
I tried
sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\([0-9]{6}\)00;/;\101;/g;s/;\(\r\?\)$/\1/' inputfile
but that doesn't work.
I think {6}
is an extended regular expression. So you either have to use sed -r
or you change your regexp to s/;\([0-9][0-9][0-9][0-9][0-9][0-9]\)00;/;\101;/g
.
If you want to use extended regular expressions, do:
sed -r 's/;([0-9]{6})00;/;\101;/g'
I.e.: you have to remove the backslashes from parens.
Edit: Regarding to Dennis Williamson's comment it's also possible to use regular regexps by escaping the curly braces:
sed 's/;\([0-9]\{6\}\)00;/;\101;/g'
精彩评论