সন্ধান করুন এবং সেড (অনুসন্ধান এবং প্রতিস্থাপন)


27

আমি আমার ম্যাকের উপরের কমান্ডটি ব্যবহার করছি:

$find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \;

এবং এটির কোনও প্রভাব নেই বলে মনে হচ্ছে।

ডিরেক্টরিতে আমার দুটি ফাইল রয়েছে যা জাভাতে শেষ হয় যা উভয়ের মধ্যেই ফু টেক্সট রয়েছে। আমি কিছু অনুপস্থিত করছি?

সম্পাদনা: মন্তব্য অনুরোধ থেকে ফলাফল

[aafghani-03:~/test amirafghani]$ find . -name "*.java" -exec sed -i 's/foo/bar/g' {} \;
sed: 1: "./bar.java": invalid command code .
sed: 1: "./foo.java": invalid command code .

2
আপনি কি ঠিক এটাই চালাচ্ছেন? আপনি যদি এর -execপরে এবং সমস্ত কিছু সরিয়ে ফেলেন তবে কী হবে? এটি জাভা ফাইলগুলির নাম মুদ্রণ করে? (আমি আশঙ্কা করছি যে আপনি এএসসিআইআই কোটের পরিবর্তে স্মার্ট উদ্ধৃতি ব্যবহার করছেন।)
মাইকেল

1
আসলে, এটি সমাধান করে, আমার পক্ষে কমপক্ষে। উভয় এবং একক উদ্ধৃতি যথাক্রমে "এবং দ্বারা প্রতিস্থাপিত হওয়া উচিত '
লেভ লেভিটস্কি

2
স্মার্ট (?) উদ্ধৃতি! .. :)
পিটার.ও

আমি যা আটকিয়েছিলাম তা হ'ল আমি যা চালাচ্ছিলাম। কেউ কি উত্তর পোস্ট করতে পারে?
আমির আফগানি

1
পরের বার আপনি যখন প্রশ্ন জিজ্ঞাসা করছেন তখন আপনি যে ত্রুটি বার্তাটি দেখছেন তা পোস্ট করুন। এটি সবার জন্য সময় সাশ্রয় করবে।
মাইকেল

উত্তর:


34

প্রথমত, আপনি শেল স্ক্রিপ্টগুলিতে নিয়মিত ascii quotes "এবং '(ascii কোড 0x22এবং 0x27যথাক্রমে) ব্যবহার করছেন তা নিশ্চিত করুন , কারণ আপনার পোস্টে উদাহরণটিতে অ-মানক উদ্ধৃতি অক্ষর রয়েছে। আপনি যদি ঘনিষ্ঠভাবে দেখেন তবে এগুলি কিছুটা আলাদা দেখায়। সম্ভবত এটি ওয়ার্ড, OOWriter, এমনকি একটি ব্রাউজার উইন্ডো সমৃদ্ধ একটি সমৃদ্ধ পাঠ্য নথি বিন্যাসের একটি অনুলিপি-পেস্ট ত্রুটি।

যেহেতু আপনি একটি ম্যাকে রয়েছেন sed, আপনার সম্ভবত ফ্রিবিএসডি বাস্তবায়ন রয়েছে , সেক্ষেত্রে আপনাকে কমান্ডটি এভাবে লিখতে হবে:

find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +

(এখানে প্রতি ফাইলের জন্য একটি অনুরোধ চালানো এড়াতে ব্যবহার +করে )।\;sed

এর FreeBSD 'র বাস্তবায়ন সালে একটি ব্যাকআপ ফাইলের এক্সটেনশন: পতাকা একটি আর্গুমেন্ট প্রয়োজন। কমান্ডটি উদাহরণস্বরূপ মূল ফাইলটিতে প্রতিস্থাপন সম্পাদনের আগে প্রথম হিসাবে ব্যাকআপ করবে । একটি খালি যুক্তি ব্যবহারের অর্থ ব্যাকআপ ফাইলটি ব্যবহার না করা, যা আপনি যা চান তা মনে হয়।sed-i-i .bakfile1.txtfile1.txt.bak''

জিএনইউতে (বা নেটবিএসডি, ওপেনবিএসডি, ব্যস্তবক্স) বাস্তবায়নের ক্ষেত্রে একই জিনিসটি হ'ল:

find . -name "*.java" -exec sed -i s/foo/bar/g {} +

আপনার মন্তব্যে আমার উত্তরকে উন্নত করার জন্য আপনাকে বাহাহাত এবং @ মাইকেল এবং @ পাইটার- ব্রিড ধন্যবাদ ।


কোঁকড়া ধনুর্বন্ধনী কি না?
জেন হিচকক্স

3
@ জেনেহিচকোক্স কোঁকড়া ধনুর্বন্ধনী ম্যাচযুক্ত ফাইলের নামের স্থানধারক
চলমান ক্ষতি বন্ধ করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.