जवाबों:
sed -i 's|'$fileWithPath'|HAHA|g' file
एकल उद्धरण एक स्ट्रिंग शाब्दिक परिभाषित करते हैं। वेरिएबल को शाब्दिक के बाहर रखने से शेल उस हिस्से का विस्तार कर सकता है।
इसके अलावा: यदि आप रास्तों को पार्स करने जा रहे हैं, तो सीड कमांड में एक सीमांकक का उपयोग करें जो निर्देशिका परिसीमन "/" के साथ भ्रमित नहीं करता है।
sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
काम करने लगता है।
ऐसी परिस्थितियों में जहां प्रतिस्थापन स्ट्रिंग या पैटर्न स्ट्रिंग में स्लैश होते हैं, आप इस तथ्य का उपयोग कर सकते हैं कि GNU sed वैकल्पिक विकल्प के लिए वैकल्पिक सीमांकक की अनुमति देता है। सीमांकक के लिए आम विकल्प पाइप चरित्र हैं | या हैश # - चरित्र के परिसीमन का सबसे अच्छा विकल्प अक्सर संसाधित होने वाली फ़ाइल के प्रकार पर निर्भर करेगा। आपके मामले में आप कोशिश कर सकते हैं
sed -i 's#'$fileWithPath'#HAHA#g' $file
अंतिम # के बाद वर्ण 'g' का उपयोग फ़ाइल में सभी घटनाओं को बदलने के लिए किया जाता है यदि आपको केवल पहली घटना को बदलना है तो 'g' को हटा दें।
आगे की स्लैश के साथ शाब्दिक तार के लिए एक बेहतर तरीका:
sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt
$fileWithPath
गलत पैटर्न डाला जाता है।