আমি কীভাবে একটি তালিকা নেব এবং এটি একটি ফাইল থেকে সরিয়ে দেব?


10

আমার কাছে ডোমেন নামগুলির একটি দীর্ঘ তালিকা রয়েছে যা আমাকে / ইত্যাদি / রিমোটডোমেনগুলি থেকে অপসারণ করতে হবে। তারা সম্ভবত ফাইলের কোনও নির্দিষ্ট ক্রমে নেই। প্রতিটি ডোমেন এক লাইনে থাকে।

আমি কীভাবে তালিকাটির মাধ্যমে পুনরাবৃত্তি করতে পারি এবং দূরবর্তী ডোমেনগুলিতে সেই লাইনটি খুঁজে পেতে এবং এটি সরাতে পারি।

উত্তর:


11
grep -Fxf list -v /etc/remotedomains > remotedomains.new
mv remotedomains.new /etc/remotedomains

-vশুধুমাত্র আউটপুট লাইন যে প্যাটার্ন মিলছে না করতে, grep বলে।

-f list, Grep বলে ফাইল থেকে নিদর্শন পড়তে list

-F, Grep বলে (যাতে আপনি Regex মেটা-অক্ষর কষ্ট চলবে না) প্লেইন স্ট্রিং, না রেগুলার এক্সপ্রেশনের যেমন নিদর্শন ব্যাখ্যা করা।

-x, Grep বলে একটি প্যাটার্ন আছে কিনা, পুরো লাইন মেলে যেমন fooযে শুধুমাত্র লাইন মুছে ফেলা আবশ্যক foo, না লাইন foobarবা barfoo


3
দ্রষ্টব্য: সর্বদা ব্যাকআপ রাখা /etc/localdomainsএবং /etc/remotedomainsএই জাতীয় জিনিসগুলি করার আগে মনে রাখবেন ।
xenoterracide

3
-Fসংশোধন করা হয়েছে স্ট্রিং মেলা ( "সঠিক মিল") জন্য, কিন্তু এটা করে না পুরো লাইন মেলে প্যাটার্ন বাধ্য। যেখানে প্যাটার্ন পুরো লাইনের সাথে মেলে সেখানে পসিক্স ম্যাচগুলিকে সীমাবদ্ধ করার জন্য -xপতাকা নির্দিষ্ট করে
ক্রিস জনসেন

@ ক্রিস: বাহ, ভাল ক্যাচ
sepp2k

1

কম ব্যবহার করুন!

comm -23 /etc/remotedomains remove

ম্যান পৃষ্ঠা থেকে:

বাছাই করা ফাইলগুলি FILE1 এবং FILE2 লাইন লাইন দিয়ে তুলনা করুন।

কোনও বিকল্প নেই, তিন-কলাম আউটপুট উত্পাদন। কলামের একটিতে FILE1 এর জন্য অনন্য লাইন রয়েছে, দুটি কলামে FILE2 এর জন্য অনন্য লাইন রয়েছে এবং তিনটি কলামে উভয় ফাইলের জন্য সাধারণ লাইন রয়েছে।

বিকল্প -1, -2 এবং -3 সম্পর্কিত কলামগুলি অক্ষম করে।

এটির জন্য অবশ্য ফাইলগুলি বাছাই করা দরকার।


0

sed -r -i -e '/^(domain1|domain2|domain3|...|domainN)$/d' domainlist.txt

যদি মুছতে আপনার ডোমেনগুলির তালিকা কোনও ফাইলে থাকে তবে:

sed -r -i -e '/^'"$(xargs <removelist.txt|sed -e 's/ /|/g)"')$/d' domainlist.txt

মন্তব্য:

  1. -I.bak ব্যবহার করে ডোমেনলিস্ট. টেক্সটের ব্যাকআপ তৈরি করতে হবে

  2. Removelist.txt থাকে অনেক এন্ট্রি হাজার হাজার এটি সর্বাধিক কমান্ড লাইন দৈর্ঘ্য ওভারফ্লো পারে। এটি খুব সম্ভবত একটি দৃশ্য নয় তবে এমন কিছু যা আপনার সম্পর্কে সচেতন হওয়া উচিত।

আরও প্রতিবিম্বে, সেই ঝুঁকিটি দিয়ে এটিকে নির্মূল করা যেতে পারে:

for RE in $(xargs <removelist.txt|sed -e 's/ /|/g') ; \
  do sed -r -i -e '/^('"$RE"')$/d' domainlist.txt ; \
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.