উত্তর:
আমি মনে করি আপনি খুঁজছেন -i
:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
উদাহরণ স্বরূপ:
$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld
আপনি যদি প্রত্যয় সরবরাহ করেন তবে এটি একটি ব্যাকআপ ফাইল তৈরি করবে:
$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt
$ ls
foo.txt foo.txt.bak
ইনপুট ফাইলটি সংশোধন করা হয়েছে এবং আসল ফাইল ডেটাযুক্ত একটি ব্যাকআপ তৈরি করা হয়েছে।
এছাড়াও লক্ষ করুন যে এটি জিএনইউর জন্য sed
, বিভিন্ন বাস্তবায়নের মধ্যে বিন্যাসে কিছুটা পার্থক্য রয়েছে sed
।
sed
ইন-প্লেস এডিটিং করে না। এটি একটি নতুন ফাইল তৈরি করে এবং পুরানোটিকে ওভাররাইট করে, ইনোড পরিবর্তন হয়।
{ rm file; cmd > file; } < file
এই সিদ্ধান্তে পৌঁছায় যে সিএমডি একই ফাইলটি পড়ে এবং লেখায় যা এটি নয়। এটি দুটি ফাইল বিকৃত করে যা কেবল একই নামের সাথে ঘটে। তবে আমি এখানে একটি আলোচনা শুরু করতে চাই না।
sed: 1: "foo.txt": invalid command code f
চলার সময় আমি পাই sed -i 's/o/X/g' foo.txt
। তবে, একটি এক্সটেনশন সরবরাহ করা যেমন sed -i .bak 's/o/X/g' foo.txt
কাজ করে works কোনও ধারণা কীভাবে এটি ব্যাকআপ ফাইল তৈরি না করে কাজ করবে?
sed -i '' 's/o/X/g' foo.txt
এই সমাধানগুলি HPUX (UNIX) এর জন্য কাজ করে:
1
{ rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh
.:
2।
perl -pi -e 's/Error/NO_Error/g' test1.sh
3।
sed 's/Error/NO_Error/g' test1.sh | tee test1.sh
-e
বিকল্পটি একাধিক sed
কমান্ড কার্যকর করার জন্য
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
file.txt
হিসাবে বিবেচনা করুন
linux os
তাহলে ও / পি হয়
unix os
-i
বিকল্প স্থায়ীভাবে পরিবর্তনগুলি সংরক্ষণ করে ...
-e
পতাকা অভিব্যক্তি জন্য দাঁড়িয়েছে। আপনি সম্ভবত-i
পতাকাটি চান যার অর্থin-place
এবং আমি আপনাকেsed -i.bak 's/../' filename