কোনও ফাইলে স্থায়ী পরিবর্তন আনতে আমি আমার এসড কমান্ডটি কীভাবে পেতে পারি?


32

এটা কি সম্ভব? আমি কোথাও পড়েছি যে নিম্নলিখিত আদেশটি এটি করবে:

sed -e [কমান্ড] [ফাইল]

তবে এটি ঠিক একই জিনিস করার জন্য উপস্থিত হয়েছিল

সেড [কমান্ড] [ফাইল]

(এটি পরিবর্তনগুলি সংরক্ষণ করে না)। সেড ব্যবহার করে এটি করার কোনও উপায় আছে?


2
-eপতাকা অভিব্যক্তি জন্য দাঁড়িয়েছে। আপনি সম্ভবত -iপতাকাটি চান যার অর্থ in-placeএবং আমি আপনাকে sed -i.bak 's/../' filename
দৃ

উত্তর:


50

আমি মনে করি আপনি খুঁজছেন -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


4
নোট করুন যে ম্যান পেজটি ভুল। sedইন-প্লেস এডিটিং করে না। এটি একটি নতুন ফাইল তৈরি করে এবং পুরানোটিকে ওভাররাইট করে, ইনোড পরিবর্তন হয়।
মার্কো

2
@ মার্কো এটি জায়গায় ফাইল সম্পাদনা করার নিরাপদ উপায়। সেড ডকুমেন্টেশনে "একটি ফাইল জায়গায় জায়গায় সম্পাদনা করা" এর অর্থ হ'ল মূল ফাইলটি (তার নাম দ্বারা সংজ্ঞায়িত) পরিবর্তিত হয়েছে, মূল ফাইলটি (তার আইনের মাধ্যমে সংজ্ঞায়িত) সংশোধিত নয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

2
@ গিলস আমি সম্পূর্ণরূপে একমত যে কোনও ফাইল সম্পাদনা করার এটি পছন্দসই উপায়, তবে আমি খুব সহজেই এটিকে স্থানটিতে কল করব । কিন্তু কোনও ফাইল কীভাবে ইনোড বা নাম দ্বারা সনাক্ত করা যায় সে প্রশ্নে এটি উত্সাহিত হয়। আমি ইনোড দিয়ে বলব, অন্যথায় পছন্দ মতো চুক্তিগুলি { rm file; cmd > file; } < fileএই সিদ্ধান্তে পৌঁছায় যে সিএমডি একই ফাইলটি পড়ে এবং লেখায় যা এটি নয়। এটি দুটি ফাইল বিকৃত করে যা কেবল একই নামের সাথে ঘটে। তবে আমি এখানে একটি আলোচনা শুরু করতে চাই না।
মার্কো

ম্যাকোজে 10.14 এ 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 কোনও ধারণা কীভাবে এটি ব্যাকআপ ফাইল তৈরি না করে কাজ করবে?
জোশুয়া পিন্টার

1
ঠিক আছে, এটি আউট। ম্যাকোজে আপনাকে এক্সটেনশন প্যারাম বিকল্পের জন্য স্পষ্টভাবে একটি খালি স্ট্রিং যুক্ত করতে হবে:sed -i '' 's/o/X/g' foo.txt
জোশুয়া পিন্টার


1

-eবিকল্পটি একাধিক sedকমান্ড কার্যকর করার জন্য

sed -e 's/linux/unix/' -e 's/os/OS/' file.txt

file.txtহিসাবে বিবেচনা করুন

linux os

তাহলে ও / পি হয়

unix os

-i বিকল্প স্থায়ীভাবে পরিবর্তনগুলি সংরক্ষণ করে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.