উত্তর:
সাথে sed
, যেমন:
sed '20,37d; 45d' < input.txt > output.txt
আপনি যদি জায়গাটিতে এটি করতে চান:
sed --in-place '20,37d; 45d' file.txt
This option specifies that files are to be edited in-place. GNU
সেড' একটি অস্থায়ী ফাইল তৈরি করে এটি করে এবং স্ট্যান্ডার্ড আউটপুট না করে এই ফাইলে আউটপুট প্রেরণ করা `... আমি অন্য কোনও 'সেড' সম্পর্কে জানি না তবে স্ট্রিম এডিটর সহ" স্থানে "আপডেট করার রসদ " গণনা "করে না :)
যদি ফাইলটি স্মৃতিতে আরামের সাথে ফিট করে তবে আপনি এটিও ব্যবহার করতে পারেন ed
।
কমান্ডগুলি sed
একটি উল্লেখযোগ্য পার্থক্যের সাথে উপরেরটির মতো বেশিরভাগ অনুরূপ : আপনাকে অবতরণ ক্রমে মুছে ফেলার জন্য লাইন নম্বর / রেঞ্জের তালিকাটি পাস করতে হবে (সর্বোচ্চ লাইন নং / সর্বনিম্ন একটিতে)) কারণটি হ'ল আপনি যখন মুছে ফেলুন / সন্নিবেশ / বিভক্ত / লাইন যুক্ত করবেন ed
তখন প্রতিটি সাবকম্যান্ডের পরে পাঠ্য বাফার আপডেট করা হয় আপনি যদি কিছু লাইন মুছে ফেলেন তবে নীচের বাকী রেখাগুলি আর বাফারে একই অবস্থানে থাকবে না যখন পরবর্তী সাবকম্যান্ড কার্যকর করা হয়। সুতরাং আপনি পিছনে 1 শুরু করতে হবে ।
ইন-প্লেস এডিটিং:
ed -s in_file <<IN
45d
20,37d
w
q
IN
অথবা
ed -s in_file <<< $'45d\n20,37d\nw\nq\n'
অথবা
printf '%s\n' 45d 20,37d w q | ed -s in_file
আপনি যদি ফাইলটিতে লেখার পরিবর্তে ফলাফলের আউটপুট মুদ্রণ করতে চান তবে w
রিন্টের সাথে ,p
রিটটি প্রতিস্থাপন করুন। আপনি যদি মূল ফাইলটি অক্ষত রাখতে চান এবং অন্য কোনও ফাইলে লিখতে চান তবে আপনি নতুন ফাইলের নামটি w
আচার সাবকন্ডে পাস করতে পারেন :
ed -s in_file <<IN
78,86d
65d
51d
20,37d
w out_file
q
IN
1
যদি না আপনি প্রতিটি d
এলিটের পরে নতুন লাইন সংখ্যা গণনা করতে ইচ্ছুক না হন , যা এই বিশেষ ক্ষেত্রেটির জন্য যথেষ্ট তুচ্ছ (20-30 লাইন মুছে ফেলার পরে, 18 টি লাইন, লাইন 45 লাইন 27 হয়ে যায়) যাতে আপনি চালাতে পারেন:
ed -s in_file <<IN
20,37d
27d
w
q
IN
তবে, যদি আপনাকে একাধিক লাইন নম্বর / রেঞ্জগুলি মুছতে হয়, তবে পিছনে কাজ করা কোনও মস্তিষ্কের নয়।
q
কমান্ডটি কি শেষে কার্যকর? আমার ধারণা এটি কোনওভাবেই বেরিয়ে আসে।
এটি কেবল স্মৃতিতে পড়ুন, এটিকে পরিবর্তন করুন, তারপরে এটি আবার লিখুন। আপনি যেমন কিছু করতে পারেন
filename = "foo"
f = open(filename, 'r+')
linenums = [1, 3]
s = [y for x, y in enumerate(f) if x not in [line-1 for line in linenums]]
f.seek(0)
f.write(''.join(s))
f.truncate(f.tell())
f.close()
একটি 5 লাইন ফাইল দিয়ে পরীক্ষা করা হয়েছে। Http://pleac.sourceforge.net/pleac_python/fileaccess.html এর ক্রেডিট , বিভাগ "অস্থায়ী ফাইল ব্যতীত জায়গায় একটি ফাইল পরিবর্তন করা" বিভাগটি দেখুন। Https://stackoverflow.com/questions/125703/how-do-i-modify-a-text-file-in-python এও দেখুন
কিছু নোট:
কেউ প্রথমে ফাইল কেটে ফেলতে পারে, তারপরে লেখার পরিবর্তে এটিতে লিখতে পারে, তারপরে উপরের মতো ছাঁটাই করতে পারে। যাইহোক, আমি পাইথন পতাকাটি জানি না যা একজনকে পড়তে দেয় এবং তারপরে একটি কাটা লিখিত লেখা করতে পারে। তবে সম্ভবত আমি কিছু মিস করছি, কারণ ডকুমেন্টটি সমস্ত পরিষ্কার নয়। যা আমার কাছে নিয়ে আসে
কখনও কখনও পাইথন ডক্স সত্যিই স্তন্যপান। Http://docs.python.org/library/function.html# ওপেন দেখুন
মোডগুলি 'আর +', 'ডাব্লু +' এবং 'এ +' আপডেট করার জন্য ফাইলটি খুলুন (নোট করুন যে 'ডাব্লু +' ফাইলটি ছাঁটাই করে)।
এটি কি আপনার কাছে কিছু বোঝায়? "আপডেট করার জন্য উন্মুক্ত" কী?
আমি জানি না অজগরটিতে এটি করা স্ট্রিম এডিটরের মতো অদৃশ্য কিছুর বিপরীতে better এটি আরও বহনযোগ্য হতে পারে, তবে আমি জানি না যে বহনযোগ্য সেড কী। আমি এটি কেবল এটি লিখেছিলাম কারণ আমি ক্লাসিক ইউনিক্স সরঞ্জামগুলি ব্যবহার করার চেয়ে নিম্ন স্তরের প্রোগ্রামিংয়ের সাথে আরও আরামদায়ক, যা তারা যদি আপনি চান ঠিক তেমন করে তবে ভাল (তবে আমার মনে হয়) সাধারণত কম নমনীয় হয়।
এই পদ্ধতির (মেমরিতে ফাইলটি ম্যানিপুলেট করা) ডিস্ক জায়গার জন্য মেমরিকে ব্যবসা করে। কয়েকশ মেগাবাইট পর্যন্ত ফাইলগুলির জন্য কয়েক গিগাবাইট মেমরিযুক্ত মেশিনগুলিতে এটি ঠিক আছে। পাইথন স্ট্রিংগুলি খুব দক্ষতার সাথে পরিচালনা করে না, সুতরাং উদাহরণস্বরূপ সি / সি ++ এ স্যুইচ করলে সামান্য পারফরম্যান্স বাড়বে এবং মেমরির ব্যবহার ব্যাপকভাবে হ্রাস পাবে।
আপনি প্রাক্তন মোডে ভিম ব্যবহার করতে পারেন:
ex -sc '20,37d|45d|x' file
d
মুছে ফেলা
x
সংরক্ষণ করেন এবং বন্ধ করেন