#!/bin/bash
regex='^(_[^_]*_)[^_]*(_.*\.txt)$'
myvar='bar'
result=$(sed -E "s/$regex/\1$myvar\2/")

echo $result # echo _12345_bar_678.txt