2010-06-10 17 views
8

के अंदर काम नहीं कर रहा है मेरा मानना ​​है कि यह एक साधारण सवाल हो सकता है, लेकिन मैंने हर जगह देखा है और कुछ कामकाज की कोशिश की है, लेकिन मैंने अभी भी समस्या हल नहीं की है।एसएड बैश स्क्रिप्ट

समस्या का वर्णन: मैं एक फ़ाइल के अंदर एक चरित्र को बदलने के लिए है और मैं इसे आसानी से कमांड लाइन का उपयोग कर सकते हैं:

sed -e 's/pattern1/pattern2/g' full_path_to_file/file 

लेकिन जब मैं एक bash स्क्रिप्ट के अंदर एक ही पंक्ति का उपयोग मैं नहीं कर सकता ऐसा लगता है कि इसे प्रतिस्थापित करने में सक्षम होना प्रतीत होता है, और मुझे एक त्रुटि संदेश नहीं मिलता है, केवल प्रतिस्थापन के बिना फ़ाइल सामग्री।

#!/bin/sh 

VAR1="patter1" 
VAR2="patter2" 

VAR3="full_path_to_file" 

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3} 

किसी भी मदद की सराहना की जाएगी।

आपके समय के लिए बहुत बहुत धन्यवाद।

+0

sed -e फ़ाइल को नहीं बदलता है, बस प्रतिस्थापन के साथ फ़ाइल दिखाएं, लेकिन फ़ाइल किसी भी मामले में नहीं बदली जा सकती है – chmeee

उत्तर

17

प्रयास करें

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3} 

Bash reference का कहना है:

वर्ण '$' और ' `' डबल कोट्स

इस प्रकार के भीतर अपने विशेष अर्थ को बनाए रखने इसे सुलझाने के लिए सक्षम हो जाएगा आपके चर

0

मैं एक स्क्रिप्ट ली का उपयोग करता हूं के तुम्हारा ... और मेरा काम भी करता है!

#!/bin/sh 

var1='pattern1' 
var2='pattern2' 

sed -i "s&$var1&$var2&g" *.html 

देखें कि, मेरा उपयोग करें "मैं" ... और विभाजक चरित्र "&" मैं का उपयोग तुम्हारा के रूप में अलग है। विभाजक चरित्र "&" किसी भी अन्य चरित्र का उपयोग किया जा सकता है जो पैटर्न पर नहीं है।

आप उपयोग कर सकते हैं:

sed -i "s#$var1#$var2#g" *.html 

sed -i "[email protected][email protected][email protected]" *.html 

...

अगर मेरे पैटर्न है: "[email protected]" निश्चित रूप से आप अलग तरह "#" एक विभाजक का उपयोग करना चाहिए, "%" ... ठीक?

संबंधित मुद्दे