Это gnu sed
сохранит первую цифру 3 и удалит все остальные:
cat file
2011-01-01 12:30:10.123456+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.12345678+00
sed -r "s/(\.[0-9]{3})[0-9]*/\1/g" file
2011-01-01 12:30:10.123+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.123+00
Укороченная версия сообщения пацифистов:
sed "s/\.*[0-9][0-9][0-9]+/+/g" file #original
sed "s/[0-9]\{3\}+/+/g" file #Shorter version
2011-01-01 12:30:10.123+00
2011-01-01 12:30:10.12+00
2011-01-01 12:30:10.1+00
2011-01-01 12:30:10.12345+00 #Both version gives more than 3 digits if its more than 6 total