com sed :
sed -e :1 -e 's/^\([^=]*\)\./_/;t1'
Isso substitui uma sequência de caracteres diferente de . no início da linha, seguida por . pela mesma sequência e _ , e repita o processo até que não seja mais correspondente.
com awk :
awk -F = -v OFS== '{gsub(/\./, "_", $1); print}'
Agora, caso o lado direito do = contenha caracteres especiais para o shell ( \ "$ & (); '# ~ < > ...', espaço, tabulação, outro espaços em branco ...), você pode citar:
sed "s/'/'\\''/g;:1"'
s/^\([^=]*\)\./_/;t1'"
s/=/='/;s/\$/'/"
Ou:
awk -F = -v q="'" -v OFS== '
{gsub(q, q "\" q q)
gsub(/\./, "_", $1)
$2 = q $2
print $0 q}'