ওএস এক্সে সেড সহ স্থানের সম্পাদনাগুলি


142

আমি ওএস এক্সে সেড দিয়ে একটি ফাইল সম্পাদনা করতে চাই I'm আমি নিম্নলিখিত কমান্ডটি ব্যবহার করছি:

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

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

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

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

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

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

2
আপনি -iপতাকাটি ব্যবহার করার সময় আপনি সঠিক আদেশটি কী ব্যবহার করছেন ?
সর্বাধিক th

উত্তর:


282

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

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

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

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

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

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

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

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


আপনি ঠিক বলেছেন আমি -i পতাকার পরে এক্সটেনশনটি বাদ দিচ্ছি। কি -i''অন্য কোন কারণে চেয়ে সম্ভাব্য মূল ফাইল আপ সেনাবিভাগে মেসে খাবার (এবং কোন ব্যাক-আপ হচ্ছে) জন্য বিপজ্জনক?
রবিবার সোমবার

sedম্যান পেজ অনুসারে আপনি যদি ডিভাইসে ডিস্কের জায়গার বাইরে চলে যান তবে আপনি কোনও ফাইল মিড-স্ট্রাইডকে দূষিত করতে পারেন এবং খারাপ ফলাফল হতে পারে। আপনি যদি স্থানীয় উত্স নিয়ন্ত্রণে sed -i ""ব্যাকআপ ব্যতীত কাজ করছেন তবে বেশিরভাগ সময় ভাল থাকতে হবে (বা মোডে git init && git add -A . && git commit -m 'backup'সেড চালানোর আগে) to -i
cfeduke

2
আমি হালকা বিপজ্জনক বিটটি বিশেষভাবে দরকারী বলে মনে করেছি। +1
আন্দ্রে

5
বিএসডি সেডের প্রয়োজন যে -i পতাকার পরে কোনও স্থান নেই। সুতরাং, -i''বৈধ, কিন্তু -i ''হয় না।
টড এ জ্যাকবস

3
আহা! বিএসডি সেড '\ n' চরিত্রটিকে উপেক্ষা করে এর পরিবর্তে 'এন' মুদ্রণ করছে! আমি কেবল আমার ম্যাকের উপর বিএসডি সেডটি জিএনইউ সেডের সাথে প্রতিস্থাপন করতে যাচ্ছি!
nterry

20

আমি ম্যাকওএস-তেও একই সমস্যা

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

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

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

ভাল কাজ করে.


এটি এখন অন্য পথে। sed -i '' <file>কাজ করে কিন্তু sed -i'' <file>আর কাজ করে না
জোহাইব আমানজাই


4

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


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

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

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

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

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


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

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

4

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


এখানে ম্যাক ওএস ক্যাটালিনাও রয়েছে। -I এবং -e উভয়কেই আলাদা করে (একসাথে নয়!) '-E' যুক্ত করে একটি ব্যাকআপ ফাইল তৈরি করে।
ড্যানিয়েল কেসনার

1

তুমি ব্যবহার করতে পার:

sed -i -e 's/<string-to-find>/<string-to-replace>/' <your-file-path>

উদাহরণ:

sed -i -e 's/Hello/Bye/' file.txt

এটি ম্যাকের ত্রুটিযুক্ত কাজ করে ।


2
এটি '-e' যুক্ত করে ম্যাক ওএস ক্যাটালিনাতে আমার জন্য একটি ব্যাকআপ ফাইল তৈরি করে।
ড্যানিয়েল কেসনার

এটি ম্যাকোসের পক্ষে ভুল। দয়া করে সেখানে "ম্যান সেড" পৃষ্ঠাটি একবার দেখুন। -iম্যাকোসের জন্য একটি যুক্তি প্রয়োজন requires যেহেতু আপনি একটি নির্দিষ্ট করে না, এটি ব্যবহার করে -e, যা -eসংযুক্ত করে দ্বিতীয় ফাইল রাখার ফলস্বরূপ । -eম্যাকোজে উপস্থিত নেই, এটি -E। ম্যাকোসের জন্য সঠিক কমান্ডটি হ'লsed -i '' -E 's/Hello/Bye/' file.txt
মার্ক জে শমিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.