но не пойму почему он выводит больше цифр чем нужно
echo qwerty-13_fbg57--=111123456=-dfgdthjh | sed -e 's/(^.*)([0-9]{6}).*/12/'
qwerty-13_fbg57--=111123456
разве он де должен был отрезать только шесть по 2 правилу
Дело в жадности (greedy regexp).
Если вставить между 1 и 2 какой-нибудь символ, будет явно видно, что попало в 1, а что в 2
Как лечить, навскидку не соображу.

Пользователь решил продолжить мысль 28 Апреля 2009, 11:40:31:
Сообразил.
Не понимаю, почему, но вот это сработало.

echo qwerty-13_fbg57--=111123456=-dfgdthjh | sed -e 's/\([^0-9]*\)\([0-9]\{6\}\).*/\1..\2/'
qwerty-13_fbg57--=..111123
Я поставил 2 точки между \1 и \2, чтобы было явно видно, что куда попадает.
Вроде бы, в 1 должно было попасть только "qwerty-"