আপনি যেখানে ব্যবহার করবেন:
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