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