আপনি যা করেছেন তা SUBSTITUTETHIS
ফাইলের যেখানেই প্রদর্শিত হবে সরিয়ে ফেলা (তবে এটি যেখানে প্রদর্শিত হবে সেখানে বাকী রেখার নয়) এবং temp.TXT
সেই লাইনের নীচে থাকা সামগ্রী .োকানো। যদি SUBSTITUTETHIS
কোনও লাইনে একাধিকবার উপস্থিত হয়, কেবলমাত্র প্রথম ঘটনাটি সরানো হবে, এবং কেবলমাত্র একটি অনুলিপি temp.TXT
যুক্ত করা হবে।
আপনি SUBSTITUTETHIS
উপস্থিত হওয়ার সাথে সাথে যদি পুরো লাইনটি প্রতিস্থাপন করতে চান তবে d
কমান্ডটি ব্যবহার করুন । যেহেতু আপনার উভয় চালানো প্রয়োজনr
এবং d
যখন কোনও মিল আছে, তখন তাদের একটি ব্রাসেড গ্রুপে রাখুন।
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
কিছু সেড বাস্তবায়ন আপনাকে কমান্ড পৃথক করতে সেমিকোলন ব্যবহার করতে দেয় এবং ব্রেসগুলির চারপাশে পুরোপুরি বিভাজক বাদ দিতে পারে তবে তবুও আপনার যুক্তিটি শেষ করতে একটি নতুন লাইন দরকার r
কমান্ডের সাথে :
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
আপনি যদি প্রতিস্থাপন করতে চান SUBSTITUTETHIS
ফাইলটির বিষয়বস্তু দ্বারা তবে লাইনের আগে এবং পরে যা আসে তা ধরে রাখুন, এটি আরও জটিল। সহজ পদ্ধতিটি হ'ল সেড কমান্ডের মধ্যে ফাইলের বিষয়বস্তু অন্তর্ভুক্ত করা; নোট করুন যে আপনাকে এর বিষয়বস্তুগুলি সঠিকভাবে উদ্ধৃত করতে হবে।
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
অথবা পার্ল ব্যবহার করুন। এটি সংক্ষিপ্ত তবে রানcat
প্রতিটি প্রতিস্থাপনের জন্য একবার :
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
স্ক্রিপ্ট শুরু হয়ে গেলে একবার ফাইলটি পড়তে, এবং শেল কমান্ডের উপর নির্ভর করে এড়াতে:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(পাঠযোগ্যতার জন্য দুটি লাইনে উপস্থাপন করা তবে আপনি লাইন ব্রেকটি বাদ দিতে পারেন)। যদি ফাইলের নামটি পরিবর্তনশীল হয় তবে সমস্যাগুলি উদ্ধৃতি এড়ানোর জন্য, পরিবেশের ভেরিয়েবলের মাধ্যমে স্ক্রিপ্টে এটি প্রেরণ করুন:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt