Para completar, algumas sed
versões:
echo "tSA_15_20161014_11-12-50" \
| sed -rn 's/^tSA_[0-9]{1,3}_([0-9]{8})_([0-9]{2})-([0-9]{2})-([0-9]{2})$//p'
echo "tSA_15_20161014_11-12-50" \
| sed -r 's/^tSA_[0-9]{1,3}_([0-9]{8})_([0-9]{2})-([0-9]{2})-([0-9]{2})$//'
echo "tSA_15_20161014_11-12-50" \
| sed -r 's/([^_]*_){2}(.*)_(.*)//;s/-//g'
echo "tSA_15_20161014_11-12-50" \
| sed -r 's/(.*_){3}//;s/[-_]//g'
Uma coisa que acho importante é a verificação de erros. Caso a variável não esteja de acordo exatamente com o formato que você forneceu, a primeira versão produzirá uma string vazia, e a segunda versão produzirá a string de entrada, inalterada. A terceira versão é uma versão de sed
de @ debal awk
resposta e a quarta é tão concisa quanto eu posso obtê-la facilmente, ambas sem o comportamento especificado na entrada incorreta.