sed 's/$HOSTNAME/myhost/g;s/$unconfigured//g' yourfile.txt > another_file.txt
aktualizace:
Na základě aktualizací ve vaší otázce to nebude dobré řešení.
aktualizace2:
To je založeno na odpovědi na související otázku. Naboural jsem se do toho (neznám perl), abych odstranil nedefinované proměnné.
perl -p -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg; s/\$\{([^}]+)\}//eg' yourfile.txt
Mělo by to fungovat pro jakýkoli vstupní textový soubor, ale budete muset definovat proměnné pomocí ${...}
formát, který zjednodušuje porovnávání řetězců.
(Řád ohledně zla eval přesunut do samostatného příspěvku, aby nedošlo ke zmatení čtenářů )
To je to, co envsubst
je pro.
echo 'Hello $USER'
Hello $USER
echo 'Hello $USER' | envsubst
Hello malvineous
Pravděpodobně byste to však použili spíše takto:
envsubst < input.txt > output.txt
envsubst
Zdá se, že je součástí GNU gettext.