मैं अपनी शेल स्क्रिप्ट में XXX नामक चर के मान के साथ फ़ॉर्म% XXX% की फ़ाइलों में टेम्पलेट स्ट्रिंग को प्रतिस्थापित करने के लिए sed का उपयोग करने का प्रयास कर रहा हूं।उस नाम के परिवर्तनीय की सामग्री के साथ फ़ाइल में स्ट्रिंग को प्रतिस्थापित करने के लिए sed का उपयोग
उदा। निम्नलिखित काम करता है पूरी तरह से
sed "s/%user_home%/$user_home/gi"
तो अगर user_home=fred
निम्नलिखित,
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>
हो जाता है,
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>
समस्या यह है कि मैं स्पष्ट रूप से टेम्पलेट तार जानने के बिना एसईडी आदेश चलाना चाहते हैं और उनके चर आगे। यही है, यह% XXX% की तलाश करता है और उसके बाद वैरिएबल का वास्तविक नाम क्या है, इसकी देखभाल किए बिना $ XXX की सामग्री के साथ बदल देता है।
मुझे पता है कि इसे बैक-रेफरेंस के साथ कुछ करने के लिए मिला है, लेकिन मैं समझ नहीं सकता कि बैक-रेफरेंस की सामग्री का उपयोग वैरिएबल नाम के रूप में कैसे किया जाए।
मैंने कोशिश की,
sed "s/%\([a-z_]\)%/$(\1)/gi"
लेकिन यह काम करने के लिए विफल रहा क्योंकि उसे एक चर की तलाश में $ \ 1 कहा जाता प्रतीत हो रहा है।
बैकटिक वहाँ काम नहीं करेगा बिना परिवर्तित किया जा सकता है। वैरिएबल को 'sed' पर तर्क भेजकर खोल _before_ द्वारा विस्तारित किया जाता है। – Barmar
पर्ल इसके लिए बेहतर होगा। यह '%' के बीच स्ट्रिंग में '$ चर' सेट करने के बाद पर्यावरण चर प्राप्त करने के लिए '$ ENV {$ variable}' का उपयोग कर सकता है। – Barmar