sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt
perbarui:
Berdasarkan pembaruan dalam pertanyaan Anda, ini bukan solusi yang baik.
perbarui2 :
Ini didasarkan pada jawaban atas pertanyaan terkait. Saya telah meretasnya (saya tidak terbiasa dengan perl) untuk menghapus vars yang tidak ditentukan.
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt
Harus berfungsi untuk file teks input apa pun, namun Anda harus mendefinisikan vars menggunakan ${...}
format yang menyederhanakan pencocokan string.
(kata-kata kasar tentang kejahatan eval dipindahkan ke postingan terpisah agar tidak membingungkan pembaca )
Inilah yang envsubst
adalah untuk.
echo 'Hello $USER'
Hello $USER
echo 'Hello $USER' | envsubst
Hello malvineous
Anda mungkin akan menggunakannya lebih seperti ini:
envsubst < input.txt > output.txt
envsubst
tampaknya menjadi bagian dari gettext GNU.