Eu usaria o awk para essa tarefa:
awk -F'=' -v "keyname=$SOMEKEY" -v "value=$SOMEOTHERVALUE" '
$1 == keyname {
if ($2 != value) $2 = "\"" value "\""
key_found = 1
}
{ print $1 "=" $2 }
END { if (!key_found) print keyname "=\"" value "\"" }
' fname
assumindo
SOMEKEY=key1
SOMEOTHERVALUE="John Doe is dead!"
e com essa entrada:
key1="John Doe is geat!
key2="Who's John Wayne?"
Obtém-se:
key1="John Doe is dead!"
key2="Who's John Wayne?"
Ou se nenhuma linha key1
estiver presente, key1="John Doe is dead!"
será anexado no final.
Observação: No Solaris ou em outros derivados do UNIX que ainda vêm uma versão antiga do awk (1) , nawk (1) deve ser usado em vez disso.