পুনরাবৃত্তভাবে সমস্ত ফাইল থেকে লাইনগুলি সন্ধান এবং মোছা


14

আমি কোনও কীওয়ার্ডের উপস্থিতিগুলি গ্রেপ করে পরিচালনা করেছি

grep "KeyWord" . -r -n -i -I 

তবে, কীওয়ার্ডের উপস্থিতি খুব বড়। আমি কেবল সেই শব্দটি ধারণ করে সমস্ত লাইন মুছতে চাই।

আমি চারপাশে অনুসন্ধান করেছি, সেড ইউটিলিটি বলে মনে হচ্ছে। কেউ কি আমাকে বলতে পারে কোন আদেশটি কৌতুক করবে?

ধন্যবাদ।

উত্তর:


25

একটি জিএনইউ সেড সহ:

find . -type f -print0 | xargs -0 sed -i /KeyWord/d

একটি ওএসএক্স সেড সহ:

find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d

প্রথম কমান্ডটি findসমস্ত স্ট্যান্ডার্ড ফাইল (ডিরেক্টরি নয়, পাইপ, বা ইত্যাদি) সন্ধান করে, সেগুলি দ্বারা পৃথক করে প্রিন্ট করে \0(যাতে ফাইলের নামগুলিতে স্পেস, নিউলাইন ইত্যাদি থাকতে পারে)।

দ্বিতীয় কমান্ড xargsআউটপুট পড়বে , findপৃথককারী ( \0কারণ -0) এর উপর ভিত্তি করে একটি sed -i [...]তালিকা sedধরবে , তালিকা থেকে যুক্ত পরামিতিগুলির সাথে আহ্বান জানাবে ( পরামিতিগুলির সর্বাধিক দৈর্ঘ্য সীমাবদ্ধ থাকায় প্রচুর ফাইল থাকলে একাধিকবার বলা হবে) প্রতিটি অনুরোধ)।

sedইন-জায়গা কমান্ড মডিফাই ( -i)।

হিসাবে /KeyWord/dএটি নিয়মিত অভিব্যক্তি যুক্ত লাইনগুলি মুছে ফেলবে KeyWord

sedআপনার (সাধারণ তবে অস্বাভাবিক) বাক্য গঠনটি সঠিকভাবে বুঝতে শিখতে হবে এবং এখানে জড়িত সরঞ্জামগুলি সম্পর্কে আরও তথ্যের জন্য উপযুক্ত মানচিত্রগুলি পড়ুন।


এবং আমি প্রচার করতে চাই zsh, এর প্রসারিত গ্লোবগুলি সহ সমাধান:

sed -i /KeyWord/d **/*(.)

কীভাবে কেবল "কীওয়ার্ড" শব্দটি মুছে ফেলা যায়। এবং পুরো লাইন না?
সুরেননিহালনি

s/KeyWord//g( সকলের জন্য KeyWord'' (খালি স্ট্রিং) সহ বিকল্প ) g(প্রতিটি লাইনে কেবল প্রথম নয়)
পিয়ের ক্যারিয়ার

1

আপনি প্রাক্তন মোডে ভিম ব্যবহার করতে পারেন:

find -type f -exec ex -sc g/KeyWord/d -cx {} ';'
  1. g গ্লোবাল অনুসন্ধান

  2. d মুছে ফেলা

  3. x সংরক্ষণ করেন এবং বন্ধ করেন


ওএসএক্সে যা আমাকে দিয়েছে find: illegal option -- t, যুক্ত করতে হয়েছিল. find . -type f -exec ex -sc g/KeyWord/d -cx {} ';'
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.