2010-07-08 5 views
14

मैं निष्पादित निम्नलिखित बैश स्क्रिप्ट एक bash स्क्रिप्ट का उपयोग करना । इसके बजाय शाब्दिक पाठ $ संस्करण डाला जा रहा है।कैसे साथ sed

इसके बजाय मुझे $ संस्करण के वर्तमान मूल्य का उपयोग करने के लिए क्या करने की आवश्यकता है?

उत्तर

17
sed "s/\${version.number}/$version/" template.txt > readme.txt 

केवल दोहरे उद्धरण डॉलर-चिह्न प्रतिस्थापन करते हैं। इसका मतलब यह भी है कि सिंगल कोट्स को भागने के लिए डॉलर के संकेत की आवश्यकता नहीं होती है।

+0

लेकिन डॉलर के संकेत से बच जाना है क्योंकि अभिव्यक्ति को 'sed' द्वारा रेगेक्स के रूप में माना जाता है। तो मुझे लगता है कि यह '\\ $' होना चाहिए। – Philipp

+1

@ फिलिप, वास्तव में '$ 'चिह्न केवल एक एंकर है जब यह रेगेक्स (या संभवतः उप-अभिव्यक्ति) का अंतिम चरित्र है। लेकिन मैं मानता हूं कि मुझे भाग्यशाली मिला। ;) आप वैकल्पिक रूप से एक बच निकला स्लैश जोड़ सकते हैं, लेकिन फिर यह '\\\ $' है। –

+0

सुधार के लिए धन्यवाद। – Philipp

4

तुम भी बस चर

sed 's/'${version.number}'/'$version'/' template.txt > readme.txt 
+0

यह सबसे अच्छा काम किया। – Val

0

यह थोड़ा पुराना है गंदें शब्द बोलना सकता है, लेकिन यह अभी भी उपयोगी हो सकता है ... मेरे लिए यह एक डबल भागने का उपयोग कर के रूप में फिलिप ने कहा कि (और कोष्ठक से बचने, अगर काम किया आप उनका उपयोग करते हैं ...):

#!/bin/bash 
LIVE_DB_NAME='wordpress'; 
STAGING='staging'; 
sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;