Primeiro de tudo, há muitas barras invertidas. Além disso, sendo ganancioso, seu primeiro globo irá devorar toda a corda até o ponto. Você pode limpar a imagem usando regexps estendidos. O segundo sublinhado é dependente da última parte (de acordo com sua descrição) deve ser entre parênteses. Você não precisa do quarto glob (em sua versão).
Algo parecido com isto:
echo sanyi_123456_m2.txt | sed -r "s/^([a-z]{4,40})_?([0-9]{6})(_(\w{,6}))?\.\w{2,4}$/ /g"
Você também pode usar expressões regulares perl onde a quantificação não-gulosa é possível.