Você não precisa obter o nome do banco de dados, não faz sentido substituir algo por si mesmo. Apenas deixe inalterado:
beg="mysqli_connect("
new="'localhost','root','pass',"
sed "s/$beg\([^,]\+,\)\{3\}/$beg$new/" file
Se eu salvar o exemplo que você deu como file , isso retorna:
$ sed "s/$beg\([^,]\+,\)\{3\}/$beg$new/" file
sadnkjnadsjknfaskdjfnlasdnfkdsa
safdjnasdkjjfasndka
asfdknjdsakjfnasjdnkfsadnjkads mysqli_connect('localhost','root','pass',"DavesDB");
sdfnjnweewrewqrfgjdgnf
vncnccnvxjncvjn4wrwerewrewerwjvcnxjnvcj
mysqli_connect('localhost','root','pass', 'TomsDB'); dsanjasdknfjansd
sakfdnjsadjkfnsa
sknfdsjdnfjsdnnqwerweq
A expressão regular sed procura $beg , depois três instâncias de não , seguidas por uma vírgula ( \([^,]\+,\)\{3\} ) e substitui-as por $beg$new . O nome do banco de dados é deixado como está, já que não há razão para alterá-lo.
Você também pode simplificar um pouco a sintaxe removendo ( de $beg , o que permite usar a sintaxe de regex estendida do sed:
$ sed -E "s/$beg\(([^,]+,){3}/$beg($new/" file
sadnkjnadsjknfaskdjfnlasdnfkdsa
safdjnasdkjjfasndka
asfdknjdsakjfnasjdnkfsadnjkads mysqli_connect('localhost','root','pass',"DavesDB");
sdfnjnweewrewqrfgjdgnf
vncnccnvxjncvjn4wrwerewrewerwjvcnxjnvcj
mysqli_connect('localhost','root','pass', 'TomsDB'); dsanjasdknfjansd
sakfdnjsadjkfnsa
sknfdsjdnfjsdnnqwerweq