sed -e "/$old/i$new" -e "/$old/{N;N;d}" input > output
onde
-
$old
pode ser apenas28.47969107
ou UMA primeira linha28.47969107 0.00000000 0.00000000
-
$new
DEVE estar no formato28.47969107 0.00000000 0.00000000\n0.00000000 28.47969107 0.00000000\n0.00000000 0.00000000 28.47969107
Outra maneira (se você tiver o novo GNU sed (versão > 4.2.1) com a opção -z
) para escapar do newline
dentro dos valores:
sed -z "s/$(printf "%b" "$old"|sed '$!s/$/\/')/$(printf "%b" "$new"|sed 's/$/\/')/" input > output
Ou se você fizer uma substituição dentro da função de atribuição de script
end_esc(){ printf "%b" "$@"|sed '$!s/$/\/' ; }
sed -z "s/$(end_esc $old)/$(end_esc $new)/" input > output