sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt
mise à jour :
D'après les mises à jour de votre question, ce ne sera pas une bonne solution.
mise à jour2 :
Ceci est basé sur une réponse à une question connexe. Je l'ai piraté (je ne connais pas perl) pour supprimer les variables non définies.
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt
Devrait fonctionner pour n'importe quel fichier texte d'entrée, mais vous devrez définir vars en utilisant le ${...}
format qui simplifie la correspondance des chaînes.
(la diatribe concernant la méchanceté d'eval a été déplacée vers un article séparé afin de ne pas confondre les lecteurs )
C'est ce que envsubst
est pour.
echo 'Hello $USER'
Hello $USER
echo 'Hello $USER' | envsubst
Hello malvineous
Vous l'utiliseriez probablement plus comme ceci :
envsubst < input.txt > output.txt
envsubst
semble faire partie de GNU gettext.