С помощью sed
:
sed -e :1 -e 's/^\([^=]*\)\./\1_/;t1'
То есть заменить последовательность символов, отличную от .
в начале строки, за которым следует .
в той же последовательности и _
, и повторяйте процесс, пока он не перестанет соответствовать.
С awk
:
awk -F = -v OFS== '{gsub(/\./, "_", $1); print}'
Теперь, если правая часть =
содержит символы, специальные для оболочки ( \
"$ & ( ); '# ~ <> ... `, пробел, табуляция, другие пробелы ...), вы можете процитировать это:
sed "s/'/'\\\\''/g;:1"'
s/^\([^=]*\)\./\1_/;t1'"
s/=/='/;s/\$/'/"
Или:
awk -F = -v q="'" -v OFS== '
{gsub(q, q "\\" q q)
gsub(/\./, "_", $1)
$2 = q $2
print $0 q}'