আপনি যেখানে ব্যবহার করবেন:
sed -i 's C:\ /root/ g'
আপনি sকমান্ডটির বিভিন্ন অংশ পৃথক করে একটি স্পেস অক্ষর সহ কমান্ডটি ব্যবহার করছেন , যা অস্বাভাবিক, তবে সম্পূর্ণ বৈধ। আপনি যখন নিজের বিভাজক চরিত্রটিকে ব্যাকস্ল্যাশের সাথে আগে রাখেন, যদিও এটি বিভাজক হিসাবে বিবেচিত হয় না, তবে যুক্তির অংশ হিসাবে।
সমস্যা এখানে আছে যে ব্যাকস্ল্যাশ হয় C:\মাঝখানে স্পেস পলায়নের হয়, তাই sনা প্রতিস্থাপন শেষে (যা এখন খুঁজে বের করে g) এবং অভিযোগ যে কমান্ড অসমাপ্ত, কারণ তোমাকে দেখেছিলাম।
অন্ততপক্ষে, আপনাকে অন্য ব্যাকস্ল্যাশ দিয়ে নিজেই ব্যাকস্ল্যাশ থেকে বাঁচতে হবে:
sed -i 's C:\\ /root/ g'
এটি কাজ করবে, যদিও অন্য একটি চরিত্রের সাথে স্পেসগুলি প্রতিস্থাপন করা আরও পরিষ্কার হতে পারে।
আপনার ব্যবহার xargsএবং সাব ডিরেক্টরি ডিরেক্টরি হিসাবে - xargsএখানে প্রয়োজন হয় না, এবং findএটি নিজের ডিরেক্টরিতে সাব-ডিরেক্টরিতে ফাইল পরিচালনা সহ এটি করতে পারেন। ব্যবহার করুন:
find ../ \( -name "*.xml" -o -name "*.conf" \) -exec sed -i -e 's|C:\\|/root/|g' '{}' +
এটি খুঁজে পাওয়া সমস্ত ফাইলের সাথে কমান্ডটি নিজে findচালাতে পারে sed। ফাইলের নামগুলি এর জায়গায় sertedোকানো হয় {}এবং এর +অর্থ findএটি কমান্ডটি চালানোর পরিমাণকে কমিয়ে দেয়।
-execdirম্যান পৃষ্ঠাতে-exec বর্ণিত কিছু সুরক্ষিত কারণে এর চেয়ে ভাল হতে পারে ; এটি একটি মানহীন এক্সটেনশন, তবে আপনার মনে হচ্ছে যে আপনি জিএনইউ সরঞ্জামগুলি ব্যবহার করছেন এটি আপনার প্রয়োজন হলে এটি আপনার উচিত।find