Как вы определили, .*
может соответствовать любому количеству символов, включая :
s.
[^:]*
, напротив, соответствует всему, кроме a :
,так что это не склонно к этому.
Как отмечает Виктор в комментариях, тогда:
sed -Ee 's/^([^:]*):([^:]*):.*/\2/' <<<'one:two:three:four'
... правильно возвращает two
.