दिलचस्प पोस्ट
कस्टम सॉर्ट बनाने के लिए तुलनित्र का उपयोग करना सामाजिक नेटवर्क में गतिविधि स्ट्रीम कैसे लागू करें मेवेन-असेंबली-प्लगइन के साथ uber जार बनाने पर जर्सी विफल रहता है क्या खुला स्रोत सी ++ स्थिर विश्लेषण उपकरण उपलब्ध हैं? ड्रॉप-डाउन सूची कैसे बनाएं? स्रोत फ़ाइल नाम और सीनेनम्बर को सी # में मुद्रित करें Maven2 को निर्भरता को प्रतिलिपि / लक्ष्य में कॉपी करने के लिए बाध्य करें IPhone के लिए टेक्स्ट-टू-स्पीच लाइब्रेरी जावास्क्रिप्ट अर्रेबफर को द्विआधारी नोडजेएस बफर को कन्वर्ट करें पासवर्ड के लिए नियमित अभिव्यक्ति (कम से कम 2 अंक और एक विशेष चरित्र और न्यूनतम लंबाई 8) रेलवे 4 में ऊपरी भाग में शामिल हों वास्तव में आधार सूचक और स्टैक पॉइंटर क्या है? वे क्या इंगित करते हैं? एंड्रॉइड स्टूडियो: "निष्पादन कार्य के लिए असफल": ऐप: मर्ज डिबग संसाधन संसाधित करें "यदि प्रोजेक्ट को ड्राइव सी पर बनाया गया है: MySQL तालिका से अनन्य अवरोध छोड़ रहा है मुझे एक सी मॉलोक दावा करने की विफलता क्यों मिलती है?

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

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

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

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

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

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

यदि आप $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"