গ্রেপ একাধিক স্ট্রিং বাদ দেয়


115

আমি লেগ ব্যবহার করে একটি লগ ফাইল দেখার চেষ্টা করছি -fএবং নিম্নলিখিত স্ট্রিংগুলি সহ সমস্ত লাইন বাদ দিতে চাই:

"Nopaging the limit is"`  and `"keyword to remove is"

আমি এর মতো একটি স্ট্রিং বাদ দিতে সক্ষম:

tail -f admin.log|grep -v "Nopaging the limit is"

কিন্তু কিভাবে আমি উভয় ধারণকারী লাইন বাদ না string1বা string2

উত্তর:


106

গ্রেপ সহ একাধিক লাইনগুলি ফিল্টার করার দুটি উদাহরণ:

এটি রাখুন filename.txt:

abc
def
ghi
jkl

স্ট্রিংয়ে টোকেনের মধ্যে পাইপের সাহায্যে গ্রেপ কমান্ড -E বিকল্পটি ব্যবহার করে:

grep -Ev 'def|jkl' filename.txt

কপি করে প্রিন্ট:

abc
ghi

ক্যারেন দ্বারা বেষ্টিত টোকেনগুলির মধ্যে পাইপের সাথে -v বিকল্পটি ব্যবহার করে কমান্ড:

egrep -v '(def|jkl)' filename.txt

কপি করে প্রিন্ট:

abc
ghi

15
আমি অবাক হয়েছি grep -v -e def -e jklযে আইএমএইচও আরও পরিষ্কার পদ্ধতি সম্পর্কে কেউ কথা
বলেনি

4
বা আরও ভাল: grep -Fv -e def -e jklযা আরও দ্রুত!
ফ্রিজল্যাব

11
-এফ পতাকা সহ, আপনি পাইপগুলির পরিবর্তে ডিলিমিটার হিসাবে নিউলাইনগুলি ব্যবহার করতে পারেন। এটি আরও সহজেই ফিল্টার হিসাবে কমান্ড আউটপুট ব্যবহারের অনুমতি দেয়, যেমন:grep -vF $(pgrep myprocess)
ফিলারেক্স

45
grep -Fv -e 'Nopaging the limit is' -e 'keyword to remove is'

-F আক্ষরিক স্ট্রিং দ্বারা মিলিত হয় (regex পরিবর্তে)

-v ম্যাচটি উল্টে দেয়

-e একাধিক অনুসন্ধান নিদর্শন (সমস্ত আক্ষরিক এবং বিপরীত) জন্য অনুমতি দেয়


1
এটি সঠিক উত্তর: একমাত্র এক যা একাধিক grep -vঘটনা এবং একটি রেইজেক্সের কৃত্রিম প্রয়োজনীয়তা উভয়ই এড়িয়ে যায় (একাধিক স্ট্রিং পৃথক যুক্তিতে পরিষ্কারভাবে নির্দিষ্ট করা যায়)। স্ট্রিংগুলির জন্য কোনও স্ক্রিপ্টে প্রোগ্রামটিমে সেই রেজেক্সটি নির্মাণের কথা কল্পনা করুন যা কিছু থাকতে পারে…
ব্যবহারকার 2394284

আসলে এগুলির কোনওটিই সঠিক উত্তর নয় কারণ কোনও কীওয়ার্ড পাস করার সময় এটি বাদ দেওয়ার জন্য কিছুই না করে সমস্ত কিছু বাদ দেওয়া হবে।
গ্যারি সানডোর

37

আরেকটি বিকল্প হ'ল একটি বাদ দেওয়া তালিকা তৈরি করা, যখন আপনার কাছে বাদ দেওয়ার মতো জিনিসগুলির একটি দীর্ঘ তালিকা থাকে তখন এটি বিশদ ব্যবহারযোগ্য।

vi /root/scripts/exclude_list.txt

এখন আপনি বাদ দিতে চান তা যোগ করুন

Nopaging the limit is
keyword to remove is

আপনার ফাইল লগ ফাইল থেকে লাইনগুলি সরাতে গ্রেপ ব্যবহার করুন এবং তথ্য বাদ নেই।

grep -v -f /root/scripts/exclude_list.txt /var/log/admin.log

1
আমি তোমাদের ব্যবহার করতে পারে বুঝতে পারছি না -vসঙ্গে -f(বা আধুনিক এমনকি অস্তিত্ব যে)।
শ্রীধর সারনোবাত

খুব খুব দরকারী!
samaspin

দ্রষ্টব্য, বর্জন তালিকার জন্য আপনাকে অস্থায়ী ফাইল তৈরি করতে হবে না। ব্যাশে আপনি প্রক্রিয়া বিকল্প ব্যবহার করতে পারেন। বাদ পড়ার তালিকাটি যদি করুণ গতিশীল হয় এবং প্রতিবার কেবল একবার ব্যবহার করার আগে আপনাকে এটি তৈরি করতে হবে:grep -v -f <(gen_exclusions.sh) /var/log/admin.log
মিরোস্লাভ



11

আপনি নিয়মিত গ্রেপ ব্যবহার করতে পারেন:

tail -f admin.log | grep -v "Nopaging the limit is\|keyword to remove is"


1
এই উত্তরটি ম্যাকোএসএক্স-এ আমার জন্য কাজ করেছে। পাইপটি সরিয়ে ফেলা কী
রেবেকা ডেসনভিল

5

গ্রেপস বেঁধে রাখা যেতে পারে। উদাহরণ স্বরূপ:

tail -f admin.log | grep -v "Nopaging the limit is" | grep -v "keyword to remove is"

1
এখানে ধরা হচ্ছে যে প্রক্রিয়াটি ফিল্টার হয়ে যাবে তার পরিবর্তে আপনাকে এন প্রক্রিয়াগুলি যথাক্রমে চালাতে হবে, যেখানে তাদের প্রত্যেকেই কিছু ফিল্টার আউট করে। এটি জিনিসগুলিকে উল্লেখযোগ্যভাবে ধীর করতে পারে।
আর্টেম ওবোটুরভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.