sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt
Aktualisierung:
Basierend auf Aktualisierungen in Ihrer Frage ist dies keine gute Lösung.
aktualisierung2 :
Dies basiert auf einer Antwort auf eine verwandte Frage. Ich habe es gehackt (ich bin mit Perl nicht vertraut), um undefinierte Variablen zu entfernen.
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt
Sollte für jede Eingabetextdatei funktionieren, Sie müssen jedoch vars mit ${...}
definieren Format, das den String-Abgleich vereinfacht.
(Rand bezüglich der Bösartigkeit von eval wurde in einen separaten Beitrag verschoben, um die Leser nicht zu verwirren )
Das ist was envsubst
ist für.
echo 'Hello $USER'
Hello $USER
echo 'Hello $USER' | envsubst
Hello malvineous
Sie würden es wahrscheinlich eher so verwenden:
envsubst < input.txt > output.txt
envsubst
scheint Teil von GNU gettext zu sein.