Próbuję użyć sed do zamiany ciągów szablonów w plikach o formacie% XXX% o wartości zmiennej zwanej XXX w moim skrypcie powłoki.Używanie sed do zamiany łańcucha w pliku na zawartość zmiennej o tej nazwie
np. Następujące prace doskonale
sed "s/%user_home%/$user_home/gi"
Więc jeśli user_home=fred
następujące pozycje,
NameVirtualHost *:80
<VirtualHost *:80>
ServerName %server_name%
ErrorLog /var/log/apache2/%user_home%_webapp_error.log
CustomLog /var/log/apache2/%user_home%_webapp.log common
DocumentRoot /home/%user_home%/web_app/public
</VirtualHost>
staje
NameVirtualHost *:80
<VirtualHost *:80>
ServerName %server_name%
ErrorLog /var/log/apache2/fred_webapp_error.log
CustomLog /var/log/apache2/fred_webapp.log common
DocumentRoot /home/fred/web_app/public
</VirtualHost>
Problemem jest to, że chcę, aby uruchomić polecenie sed bez wyraźnego poznania sznurki szablonów i ich zmienne z góry. Oznacza to, że szuka% XXX%, a następnie zamienia ją na zawartość $ XXX, nie dbając o rzeczywistą nazwę zmiennej.
Wiem, że ma to coś wspólnego z odsyłaczami wstecznymi, ale nie mogę wymyślić, jak użyć zawartości odwołania zwrotnego jako nazwy zmiennej.
Próbowałem,
sed "s/%\([a-z_]\)%/$(\1)/gi"
ale to nie działa, ponieważ wydaje się być patrząc na zmienną o nazwie $ \ 1.
backticks nie będzie tam pracować. Zmienne są rozszerzane przez powłokę _ przed wysłaniem argumentu do 'sed'. – Barmar
Perl byłby lepszy do tego. Może użyć '$ ENV {$ variable}', aby uzyskać zmienną środowiskową po ustawieniu zmiennej '$ zmienna' na łańcuch znaków pomiędzy'% '. – Barmar