sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt
actualizar:
Según las actualizaciones en su pregunta, esta no será una buena solución.
actualización2:
Esto se basa en una respuesta a una pregunta relacionada. Lo pirateé (no estoy familiarizado con Perl) para eliminar las variables indefinidas.
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt
Debería funcionar para cualquier archivo de texto de entrada, sin embargo, deberá definir vars usando el ${...}
formato que simplifica la coincidencia de cadenas.
(la diatriba sobre la maldad de eval se trasladó a una publicación separada para no confundir a los lectores )
Esto es lo que envsubst
es para.
echo 'Hello $USER'
Hello $USER
echo 'Hello $USER' | envsubst
Hello malvineous
Sin embargo, probablemente lo usarías más así:
envsubst < input.txt > output.txt
envsubst
parece ser parte de GNU gettext.