2012-09-05 21 views
5

मैं दो sed आदेशों का उपयोग करके दो स्ट्रिंग्स को एक php फ़ाइल में बदलने की कोशिश कर रहा हूं, मुझे यह नहीं पता कि मैं कहां गलत हूं।sed: इस नियमित अभिव्यक्ति को हल नहीं कर सकता

तार

setlocale(LC_ALL, $_COOKIE['lang']); 

और

putenv("LANGUAGE=".$_COOKIE['lang']); 

तार करने से बदलने के लिए चाहते हैं

setlocale(LC_ALL, $_COOKIE['lang'].'.utf8'); 

और

putenv("LANGUAGE=".$_COOKIE['lang'].'.utf8'); 

अब तक मैं निम्नलिखित पर आए हैं लेकिन

sed -i "s/setlocale\(LC_ALL, \$_COOKIE\['lang'\]\);.*$/setlocale\(LC_ALL, \$_COOKIE\['lang'\]\.'\.utf-8'\)\;/" file.php 

sed -i "s/putenv\('LANGUAGE='\.\$_COOKIE\['lang'\]\);.*$/putenv\('LANGUAGE='\.\$_COOKIE\['lang'\]\.'\.utf-8'\)\;/" file.php 

काम नहीं करता है मैं निश्चित रूप से नहीं एसईडी और नियमित अभिव्यक्ति में एक विशेषज्ञ हूँ, इसलिए मुझ पर आसान ठीक जाना?

उत्तर

4

इन दोनों का प्रयास करें:

sed 's/setlocale.LC_ALL, ._COOKIE..lang...;/setlocale\(LC_ALL, $_COOKIE\['\''lang'\''\].'\''.utf8'\''\);/g' file.php 
sed 's/putenv..LANGUAGE...._COOKIE..lang...;/putenv\("LANGUAGE=".$_COOKIE\['\''lang'\''].'\''.utf8'\'');/g' file.php 
+0

यह भी काम करता है, और प्रत्येक स्ट्रिंग के लिए, धन्यवाद। – TechNyquist

3

आपको कोष्ठक से बचना नहीं चाहिए। वहाँ प्रतिस्थापन भाग में मिलान करने वाले वर्णों से बचने के लिए कोई जरूरत नहीं है, या तो:

sed "s/setlocale(LC_ALL, \$_COOKIE\['lang'\]);.*$/setlocale(LC_ALL, \$_COOKIE['lang'].'.utf-8')\;/" 

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

+0

यही काम किया, धन्यवाद। – TechNyquist

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