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}'