আপনি একটি ছোট পার্ল স্ক্রিপ্ট সহ কিছু অপরিশোধিত কাজ করতে পারেন যা -l -pe
আর্গুমেন্ট ( -i
) হিসাবে পাস করা ফাইলগুলিতে স্থানে লাইন ( ) দ্বারা প্রতিস্থাপন লাইন সম্পাদন করার নির্দেশ দেওয়া হয়েছে :
perl -i -l -pe '
if (/from/) { # is the source text present on this line?
printf STDERR ("%s: %s [y/N]? ", $ARGV, $_); # display a prompt
$r=<STDIN>; # read user response
if ($r =~ /^[Yy]/) { # if user entered Y:
s/from/to/g; # replace all occurences on this line
}' /path/to/files
সম্ভাব্য উন্নতিগুলি হ'ল প্রম্পটের অংশগুলি রঙ করা এবং "বর্তমান ফাইলের সমস্ত উপস্থিতি প্রতিস্থাপন করুন" এর মতো জিনিসগুলিকে সমর্থন করা। একটি লাইনে প্রতিটি ঘটনার জন্য পৃথকভাবে অনুরোধ করা আরও শক্ত হবে।
দ্বিতীয় অংশ, ফাইলগুলি মিলছে। যদি খুব বেশি সংখ্যক ফাইল জড়িত না থাকে এবং আপনি zsh চালাচ্ছেন তবে আপনি বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলির সমস্ত ফাইলকে পুনরাবৃত্তভাবে মিলিয়ে নিতে পারেন:
perl -i -l -pe '…' **/*(.)
যদি আপনার শেলটি ব্যাশ ≥4 হয় perl … **/*
তবে আপনি চালনা করতে পারেন তবে এটি উদ্দীপনাজনিত ত্রুটি বার্তা তৈরি করবে কারণ সেড ডিরেক্টরিতে চালানোর চেষ্টা করবে (এবং ব্যর্থ)। আপনি যদি কেবল সি ফাইলের মতো ফাইলে সেট করে প্রতিস্থাপন করতে চান তবে আপনি ম্যাচগুলি সীমাবদ্ধ করতে পারেন (যা বাশ ≥4 বা zsh এর মধ্যে কাজ করে):
perl -i -l -pe '…' **/*.[hc]
আপনি যে ফাইলগুলি প্রতিস্থাপন করছেন তার উপর যদি আপনার আরও নিয়ন্ত্রণের প্রয়োজন হয় বা আপনার শেলটিতে পুনরাবৃত্ত ডিরেক্টরিটি মিলছে না বা আপনার **
যদি খুব বেশি ফাইল রয়েছে এবং একটি "কমান্ড লাইন খুব দীর্ঘ" ত্রুটি পেয়ে থাকেন তবে ব্যবহার করুন find
। উদাহরণস্বরূপ, নামযুক্ত সমস্ত ফাইল *.h
বা *.c
বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিগুলিতে প্রতিস্থাপন সম্পাদন করতে (পুরানো সিস্টেমে, আপনাকে লাইনের শেষের \;
পরিবর্তে ব্যবহার করতে হবে +
( +
ফর্মটি দ্রুত তবে সর্বত্র উপলব্ধ নয়)।
find . -type f -name '*.[hc]' -exec perl -i -l -pe '…' {} +
এটিই বলা হচ্ছে, আপনার ইন্টারঅ্যাকশন প্রয়োজন হলে আমি একটি ইন্টারেক্টিভ সম্পাদককে আটকে থাকব। জার্ট ভিমে এটির জন্য একটি উপায় দেখিয়েছে , যদিও এটির জন্য যে সমস্ত ফাইল আপনি সন্ধান করতে চান তা খোলার দরকার রয়েছে, যদি খুব বেশি সমস্যা থাকে তবে সমস্যা হতে পারে।
ইম্যাক্সে, আপনি এখানে এটি কীভাবে করতে পারেন তা এখানে:
M-x find-name-dired
(শীর্ষস্থানীয় ডিরেক্টরি M-x find-dired
নির্দিষ্ট করুন ) বা (একটি স্বেচ্ছাসেবক find
কমান্ড লাইন নির্দিষ্ট করুন ) দিয়ে ফাইলের নাম সংগ্রহ করুন ।
- ফলে সালে dired বাফার, প্রেস
t
সমস্ত ফাইল, চিহ্নিত করতে তারপর Q
( dired-do-query-replace-regexp
) হিসাবে চিহ্নিত ফাইল প্ররোচনা সঙ্গে একটি প্রতিস্থাপন সঞ্চালন।
s/from/to/g
পরে ফরম্যাটিং গ্লুইচের মতো পড়তে চাইতাম , বরং আপনি যেভাবে লেখার চেষ্টা করেছিলেন তারs/from/to/gc
উপর জোর দেওয়ার চেয়েc
(আপনি মার্কডাউন দিয়ে এটি করতে পারবেন না, আপনি এটি দিয়ে করতে পারতেন)<code>
এবং<strong>
এইচটিএমএল ট্যাগ)।