SED में फ़ाइल पथ से कैसे बचें?


39

$fileWithPathमें बदलना चाहूँगा $file, हालाँकि यह काम नहीं करता क्योंकि (मुझे लगता है) रास्ता बच नहीं रहा है। इससे कैसे बचा जाए?

sed -i 's/${fileWithPath}/HAHA/g' $file

जवाबों:


71
sed -i 's|'$fileWithPath'|HAHA|g' file

एकल उद्धरण एक स्ट्रिंग शाब्दिक परिभाषित करते हैं। वेरिएबल को शाब्दिक के बाहर रखने से शेल उस हिस्से का विस्तार कर सकता है।

इसके अलावा: यदि आप रास्तों को पार्स करने जा रहे हैं, तो सीड कमांड में एक सीमांकक का उपयोग करें जो निर्देशिका परिसीमन "/" के साथ भ्रमित नहीं करता है।


1
खबरदार कि अगर व्हॉट्सएप हो तो $fileWithPathगलत पैटर्न डाला जाता है।
लीकेनस्टेन

फ़ाइल पथ के लिए सीमांकक बदलने के बारे में आपका बोनस टिप एक जीवन रक्षक था!
Shadoninja

मुझे लगता है कि आपके आदेश में बहुत अधिक उद्धरण हैं। मेरा उदाहरण sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpnकाम करने लगता है।
लेओ लेपोल्ड हर्ट्ज़ o

15

ऐसी परिस्थितियों में जहां प्रतिस्थापन स्ट्रिंग या पैटर्न स्ट्रिंग में स्लैश होते हैं, आप इस तथ्य का उपयोग कर सकते हैं कि GNU sed वैकल्पिक विकल्प के लिए वैकल्पिक सीमांकक की अनुमति देता है। सीमांकक के लिए आम विकल्प पाइप चरित्र हैं | या हैश # - चरित्र के परिसीमन का सबसे अच्छा विकल्प अक्सर संसाधित होने वाली फ़ाइल के प्रकार पर निर्भर करेगा। आपके मामले में आप कोशिश कर सकते हैं

sed -i 's#'$fileWithPath'#HAHA#g' $file

अंतिम # के बाद वर्ण 'g' का उपयोग फ़ाइल में सभी घटनाओं को बदलने के लिए किया जाता है यदि आपको केवल पहली घटना को बदलना है तो 'g' को हटा दें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.