আপনি যদি এর সমতুল্য চান তবে sed -i.bak
এটি বেশ সহজ।
জিএনইউ সিডের জন্য এই স্ক্রিপ্টটি বিবেচনা করুন:
#!/bin/sh
# Create an input file to demonstrate
trap 'rm -r "$dir"' EXIT
dir=$(mktemp -d)
grep -v '[[:upper:][:punct:]]' /usr/share/dict/words | head >"$dir/foo"
# sed program - removes 'aardvark' and 'aardvarks'
script='/aard/d'
##########
# What we want to do
sed -i.bak -e "$script" "$dir"
##########
# Prove that it worked
ls "$dir"
cat "$dir/foo"
আমরা কেবল চিহ্নিত লাইনটি এর সাথে প্রতিস্থাপন করতে পারি
cp "$dir/foo" "$dir/foo.bak" && sed -e "$script" "$dir/foo.bak" >"$dir/foo"
এটি বিদ্যমান ফাইলটিকে ব্যাকআপ হতে সরিয়ে দেয় এবং একটি নতুন ফাইল লেখায়।
আমরা যদি এর সমতুল্য চাই
sed -i -e "$script" "$dir" # no backup
তাহলে এটি কিছুটা জটিল। আমরা স্ট্যান্ডার্ড ইনপুট হিসাবে ফাইলটি পড়ার জন্য খুলতে পারি, তারপরে সেডের আউটপুটটি প্রতিস্থাপনের আগে এটি লিঙ্কমুক্ত করতে পারি:
( cp "$dir/foo" "$dir/foo.bak"; exec <"$dir/foo.bak"; rm "$dir/foo.bak"; exec sed -e "$script" >"$dir/foo" )
আমরা এটি একটি সাব-শেলের মাধ্যমে করি, যাতে আমাদের মূল স্ট্ডিন এর পরেও উপলব্ধ। ইনপুটগুলি স্যুইচেল করা এবং সাবসেল ছাড়াই ফিরে স্যুইচ করা সম্ভব, তবে এই উপায়টি আমার কাছে আরও স্পষ্ট মনে হয়।
নোট করুন যে আমরা একটি নতুন foo
ফাইল তৈরি করার চেয়ে প্রথমে অনুলিপি করতে সতর্ক রয়েছি - যদি ফাইলটি একাধিক নাম দ্বারা পরিচিত হয় (যেমন হার্ড লিঙ্ক রয়েছে) এবং আপনি নিশ্চিত হতে চান যে আপনি লিঙ্কগুলি ভঙ্গ করবেন না ।
/usr/gnu/bin/sed
-i সমর্থন পেতে কেবল ব্যবহার করুন ।