O seguinte funciona com o GNU sed - ele faz uso dos marcadores de limite de palavra \< e \> para garantir que ele altere apenas old para new quando é uma "palavra" por si só e não apenas incorporado como parte de uma palavra como cold .
$ sed -e 's/\<old\>/new/g' foo.c
for(int i=0; i<new(a, 10); i++)
{
sum += new(c*c, i*a)
}
Use a opção -i do GNU sed se você quiser alterar o arquivo no local em vez de imprimir para o stdout.
AVISO : este script sed mudará TODAS ocorrências de /\<old\>/ no arquivo de origem. Isso pode ser muito mais do que você deseja mudar.