दिलचस्प पोस्ट
पेपरक्लिप में डिफ़ॉल्ट_अर्नल संपत्ति पाइपलाइन अपग्रेड के साथ तोड़ दिया मेवेन और सिस्टम स्कोप में जार जोड़ना PHP memory_limit बढ़ाना किस बिंदु पर यह पागल हो जाता है? एक्सल वर्कशीट से एसक्यूएल सम्मिलित स्क्रिप्ट जेनरेट करें सभी संभावित संयोजन उत्पन्न करना एक वास्तविक (निश्चित / अस्थायी बिंदु) मूल्य को दबाना सबसे तेज़ तरीका है? जावास्क्रिप्ट का उपयोग कर छवि मौजूद है या नहीं ईक्लिपस टिप्पणी / अनुक्रम शॉर्टकट? अजगर थ्रेडिंग ओवरराइडिंग। थ्रेड.रन () शरीर की ऑनलोड इवेंट के निष्पादन के बाद WinForms WebBrowser में HTML बॉडी सामग्री प्राप्त करना मैं PHP में PHP के लिए लाइन X से कैसे फाइल खोलूँ? एक स्ट्रिंग को एक टेम्पलेट स्ट्रिंग में कनवर्ट करें एक एक्सेल उपयोगकर्ता परिभाषित समारोह में एक पत्रक का उपयोग कर बूटस्ट्रैप संतुलन बुलेट कॉलम अगर माता-पिता और बच्चे की एक ही ऊंचाई होती है तो एक ऊर्ध्वाधर स्क्रॉल बार क्यों है?

एक चर का प्रयोग करके शेल स्क्रिप्ट में एक स्ट्रिंग बदलें

मैं शेल स्क्रिप्ट के अंदर स्ट्रिंग की जगह के लिए नीचे कोड का उपयोग कर रहा हूं।

echo $LINE | sed -e 's/12345678/"$replace"/g' 

लेकिन इसे उस चर के मूल्य के स्थान पर $replace किया गया है जो $replace किया गया है।

क्या कोई बता सकता है कि गलत क्या हुआ?

Solutions Collecting From Web of "एक चर का प्रयोग करके शेल स्क्रिप्ट में एक स्ट्रिंग बदलें"

यदि आप $replace व्याख्या करना चाहते हैं, तो आपको सिंगल उद्धरण का उपयोग नहीं करना चाहिए क्योंकि वे चर प्रतिस्थापन को रोकते हैं।

प्रयत्न:

 echo $LINE | sed -e "s/12345678/\"${replace}\"/g" 

यह मानते हुए कि आप उद्धरण चिह्नों को अंदर रखना चाहते हैं। यदि आप उद्धरण नहीं चाहते हैं, तो इसका उपयोग करें:

 echo $LINE | sed -e "s/12345678/${replace}/g" 

ट्रांसक्रिप्ट:

 pax> export replace=987654321 pax> echo X123456789X | sed "s/123456789/${replace}/" X987654321X pax> _ 

बस यह सुनिश्चित करने के लिए सावधान रहें कि ${replace} sed लिए कोई महत्व नहीं है (उदाहरण के लिए) क्योंकि इससे बचने तक कोई भ्रम नहीं होगा। लेकिन अगर, जैसा कि आप कहते हैं, आप एक नंबर दूसरे के साथ बदल रहे हैं, यह एक समस्या नहीं होनी चाहिए।

आप शेल (बाश / के.एस.) का उपयोग कर सकते हैं

 $ var="12345678abc" $ replace="test" $ echo ${var//12345678/$replace} testabc 

एकल उद्धरण बहुत मजबूत हैं एक बार अंदर, जब तक आप नहीं छोड़ते तब तक चरणीय प्रतिस्थापन के लिए कुछ भी नहीं कर सकते। बजाय दोहरे उद्धरण चिह्नों का उपयोग करें:

 echo $LINE | sed -e "s/12345678/$replace/g" 

सवाल के लिए विशिष्ट नहीं है, लेकिन उन लोगों के लिए जिनकी पिछली उत्तर से स्पष्टता के लिए विस्तारित कार्यक्षमता की आवश्यकता है:

 str="someFileName.foo" find=".foo" replace=".bar" result=${str//$find/$replace} echo $result # result is: someFileName.bar str="someFileName.sally" find=".foo" replace=".bar" result=${str//$find/$replace} echo $result # result is: someFileName.sally because ".foo" was not found 
 echo $LINE | sed -e 's/12345678/'$replace'/g' 

आप अभी भी एकल उद्धरणों का उपयोग कर सकते हैं, लेकिन जब आप चाहते हैं कि वे सही स्थान पर विस्तारित हो जाएं, तो आपको उन्हें "खोलना" होगा। अन्यथा स्ट्रिंग "शाब्दिक रूप से" लिया जाता है (जैसा कि पाक्साडीओब्लो सही ढंग से कहा गया है, उसका जवाब भी सही है)

अपने खोल को चर का विस्तार करने देने के लिए, आपको दोहरे उद्धरण चिह्नों का उपयोग करना होगा

 sed -i "s#12345678#$replace#g" file.txt 

यह तोड़ देगा यदि $replace में विशेष sed वर्ण ( # , \ ) शामिल हो। लेकिन आप $replace बोली लगाने के लिए प्रतिपूर्ति कर सकते हैं:

 replace_quoted=$(printf '%s' "$replace" | sed 's/[#\]/\\\0/g') sed -i "s#12345678#$replace_quoted#g" file.txt 

इसका उपयोग इसके बजाय

 echo $LINE | sed -e 's/12345678/$replace/g' 

यह मेरे लिए काम करता है बस उद्धरण को हटाएं

मैं दोहरे उद्धरण चिह्नों का उपयोग करना पसंद करता हूं, क्योंकि एकल क्यूप्तों बहुत शक्तिशाली हैं क्योंकि हम उन्हें इस्तेमाल करते हैं, अगर इसके अंदर कुछ भी बदलने में सक्षम नहीं हैं या वे चर सिक्युटियन का उपयोग कर सकते हैं।

इसलिए डबल उद्धरण का उपयोग करें instaed

 echo $LINE | sed -e "s/12345678/$replace/g"