macos ওএস এক্স এ সিডি সঙ্গে স্থান পরিবর্তন




file-io sed (5)

আমি ওএস এক্স এর সাথে একটি ফাইল সম্পাদনা করতে চাই। আমি নিম্নোক্ত কমান্ডটি ব্যবহার করছি:

sed 's/oldword/newword/' file.txt

আউটপুট টার্মিনালে পাঠানো হয়। file.txt সংশোধন করা হয় না। পরিবর্তনগুলি এই কমান্ডের সাথে file2.txt এ সংরক্ষণ করা হয়েছে:

sed 's/oldword/newword/' file1.txt > file2.txt

তবে আমি অন্য ফাইল চাই না। আমি শুধু file1.txt সম্পাদনা করতে চান। কিভাবে আমি এটি করতে পারব?

আমি -আই পতাকা চেষ্টা করেছি। নিম্নলিখিত ত্রুটি এই ফলাফল:

sed: 1: "file1.txt": invalid command code f

ব্যাক-আপ ফাইলটিতে যোগ করার জন্য আপনি -i ফ্ল্যাগটিকে সঠিকভাবে সরবরাহ করে এটি ব্যবহার করতে পারেন। আপনার উদাহরণ প্রসারিত:

sed -i.bu 's/oldword/newword/' file1.txt

আপনাকে দুটি ফাইল দিবে: বিকল্প file1.txt.bu নামের সাথে প্রতিস্থাপন রয়েছে, এবং file1.txt.bu নামে একটি যার মূল সামগ্রী আছে।

হালকা বিপজ্জনক

আপনি যদি মূল ফাইলটি ধ্বংসাত্মকভাবে মুছে ফেলতে চান তবে এর মতো কিছু ব্যবহার করুন:

sed -i '' 's/oldword/newword/' file1.txt
      ^ note the space

লাইন পার্স করা হওয়ার পথে, বিকল্প ফ্ল্যাগ এবং এর যুক্তিগুলির মধ্যে একটি স্থান প্রয়োজন কারণ যুক্তিটি শূন্য-দৈর্ঘ্য।

সম্ভবত আপনার মূল ট্র্যাশিং ছাড়া, আমি এই ভাবে seducing কোন বিপদ সম্পর্কে সচেতন নই। তবে এটি অবশ্যই উল্লেখ করা উচিত যে, যদি এই প্রস্তাবটি সিডির একটি স্ক্রিপ্টের অংশ হয়, তবে ইউনিক্স ওয়ে ™ (IMHO) ব্যবহার করে অ-ধ্বংসাত্মকভাবে ব্যবহার করতে হবে, পরীক্ষা করে দেখুন যে এটি পরিষ্কারভাবে প্রস্থান করা হয়েছে এবং কেবলমাত্র বহিরাগত ফাইলটি মুছে ফেলুন।


এটি ব্যাকআপ ফাইল তৈরি করে। যেমন sed -i -e 's/hello/hello world/' testfile আমার জন্য testfile, একই ফাইলের মধ্যে একটি ব্যাকআপ ফাইল, testfile-e তৈরি করে।


sed -i -- "s/https/http/g" file.txt

আপনি ইতিমধ্যেই প্রস্তাবিত হিসাবে -i'' ( --in-place ) ব্যবহার করতে পারেন। দেখুন: -i -in-place যুক্তি , তবে মনে রাখবেন যে -i বিকল্পটি অ-স্ট্যান্ডার্ড ফ্রিBSD এক্সটেনশান এবং অন্যান্য অপারেটিং সিস্টেমে উপলব্ধ নাও হতে পারে। দ্বিতীয়ত sed একটি এস টিম ইডি এটির, একটি ফাইল সম্পাদক নয়

বিকল্প উপায় ভিম প্রাক মোডে অন্তর্নির্মিত প্রতিস্থাপন ব্যবহার করা হয়, যেমন:

$ ex +%s/foo/bar/g -scwq file.txt

এবং একাধিক ফাইলের জন্য:

$ ex +'bufdo!%s/foo/bar/g' -scxa *.*

সব ফাইল পুনরাবৃত্তি করার জন্য আপনি **/*.* ব্যবহার করতে পারেন **/*.* যদি শেল সমর্থন করে ( shopt -s globstar দ্বারা সক্ষম)।

আরেকটি উপায় gawk এবং তার নতুন "inplace" এক্সটেনশন ব্যবহার করা হয় যেমন:

$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1

আমি MacOS সঙ্গে একই সমস্যা আছে

sed -i '' 's/oldword/newword/' file1.txt

কাজ করে না, কিন্তু

sed -i"any_symbol" 's/oldword/newword/' file1.txt

ভাল কাজ করে.





in-place