sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt
aggiornamento:
Sulla base degli aggiornamenti nella tua domanda, questa non sarà una buona soluzione.
aggiornamento2 :
Questo si basa su una risposta a una domanda correlata. L'ho hackerato (non ho familiarità con perl) per rimuovere le variabili non definite.
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt
Dovrebbe funzionare per qualsiasi file di testo di input, tuttavia dovrai definire vars usando ${...}
formato che semplifica la corrispondenza delle stringhe.
(lo sfogo sulla malvagità di eval è stato spostato in un post separato per non confondere i lettori )
Questo è ciò che envsubst
è per.
echo 'Hello $USER'
Hello $USER
echo 'Hello $USER' | envsubst
Hello malvineous
Probabilmente lo useresti più in questo modo però:
envsubst < input.txt > output.txt
envsubst
sembra far parte di GNU gettext.