একাধিক প্যাটার্ন নেতিবাচক ম্যাচ গ্রেপ করুন


14

সুতরাং আমার কাছে স্ট্যান্ডার্ড লগ ফর্ম্যাটটি ব্যবহার করে অ্যাপাচি লগের একটি গুচ্ছ রয়েছে। আমি সমস্ত লগ লাইনগুলি পেতে চাই যা ওয়েব ক্রলার থেকে আসে নি।

সুতরাং আসুন আমি বলি যে আমার কাছে এন্ট্রিগুলির মতো একটি ফাইল রোবট_প্যাটার্ন রয়েছে

Googlebot
msnbot-media
YandexBot
bingbot

আমি যদি কমান্ডটি চালনা grep -f robot_patterns *.logকরি তবে উপরের নিদর্শনগুলির সাথে মেলে বটগুলি দ্বারা সমস্ত এন্ট্রি পেয়ে যাব। আমার আসল তালিকায় বট এবং এজেন্টদের ~ 30 এন্ট্রি রয়েছে যা আমি উপেক্ষা করতে চাই।

তবে আমি সমস্ত এন্ট্রিগুলি সন্ধান করতে চাই যা বট থেকে নয় । সুতরাং আমি চেষ্টা করি grep -v -f robot_patterns *.logএবং গ্রেপ দ্বারা কোনও ফলাফল ফিরে আসে না। এটি আমার প্রত্যাশা বা ইচ্ছা নয়, এবং আমি যা চাই তা পাওয়ার কোনও সুস্পষ্ট উপায় আমি খুঁজে পাচ্ছি না। -vকোনও ফাইলে একাধিক নিদর্শনগুলির সাথে মিলিত বিকল্পটি ব্যবহার করার সময় , গ্রেপ কেবলমাত্র একটি মিলে যাওয়া লাইনটি যদি প্রতিটি প্যাটার্নের সাথে মেলে তা ফিরিয়ে আনবে।


আমি যখন এটি আমার সিস্টেমে চেষ্টা করেছি, গ্রেপ-ভি -f এর পছন্দসই আচরণ ছিল, কেবলমাত্র রেখাগুলিই ফিরে আসল যা কোনও নিদর্শনগুলির সাথে মেলে না। এটি (জিএনইউ গ্রেপ) 2.14.56-1e3 ডি সহ ছিল। আপনি কি গ্রেপ ব্যবহার করছেন?
উইজেডসবারমারিনার

আমি দৌড়াচ্ছি GNU grep 2.6.3
জোড়দাচে

4
আমি আরও কিছু পরীক্ষা করে দেখেছি এবং দেখেছি যে নিদর্শন ফাইলে যদি খালি লাইন থাকে তবে এটি প্রতিটি লাইনের সাথে মিলবে, যার ফলে কোনও লাইন -v দিয়ে ফিরে আসে না। এটি তবে -ফ-এর সমস্যা নয়, এবং -এফ আপনার কাজের জন্য গ্রেপ বাড়িয়ে তুলতে পারে - আপনার জন্য চেষ্টা করা উপযুক্ত হতে পারে।
উইজেডসবারমারিনার

একটি ফাঁকা ফাঁকা রেখা! আরগ ... বিষয়টি মনে হচ্ছে। আপনি যদি চান তবে আপনার উত্তর হিসাবে এটি যুক্ত করা উচিত।
জোড়াদেচি

উত্তর:


8

নিদর্শন ফাইলে যদি খালি লাইন থাকে তবে এটি প্রতিটি লাইনের সাথে মিলবে, যার ফলে কোনও লাইনই ফিরে আসবে না -v। এটি কারণ রেখাগুলি নিয়মিত অভিব্যক্তি হিসাবে ব্যাখ্যা করা হয় এবং একটি খালি নিয়মিত অভিব্যক্তি সর্বদা মিলবে।

এটি -Fতবে সমস্যা নয় , কারণ grepখালি লাইনগুলি উপেক্ষা করে -F। লাইনগুলি অনুসন্ধানের জন্য সরল স্ট্রিং হিসাবে ব্যাখ্যা করার
-Fকারণ grepএবং grepনিয়মিত প্রকাশের প্রয়োজন না হলে গতি বাড়িয়ে তুলতে পারে ।


1
গনুহ fgrepউপেক্ষা যে খালি স্ট্রিং trailing একটি বাগ 2.19 (সংশোধন ছিল 2d3832e1ff772dc1a374bfad5dcc1338350cc48b কমিট , তাই আপনি এর উপর নির্ভর করা উচিত নয়।
Stéphane Chazelas

13

আপনি চেষ্টা করতে পারেন:

grep -vE 'Googlebot|msnbot-media|YandexBot|bingbot' yourlogfile

2
ইউনিক্স ও লিনাক্সে আপনাকে স্বাগতম। ওপিতে প্রায় 30 টি স্ট্রিংয়ের একটি তালিকা রয়েছে যা তিনি উপেক্ষা করতে চান এবং তিনি যে চারটি উদাহরণ হিসাবে উপস্থাপন করেছেন তার প্রতিটি দৈনিক গড় দশটি অক্ষর রয়েছে, সুতরাং আপনার কমান্ড সম্ভবত 300 টি অক্ষরের বেশি হবে long এটি বজায় রাখা (এবং পড়তে এমনকি) পক্ষে কঠিন হতে পারে। ওপির স্ট্রিংগুলির তালিকা দ্বারা চালিত হওয়ার জন্য আপনি কি নিজের উত্তরটি পরিবর্তন করতে পারেন? …………………………………………………………… পিএস আপনি কি লক্ষ্য করেছেন যে উত্তরটি পাওয়া গেছে? - ওপিতে শিখেছে কীভাবে তার কাজের প্রতি তার আসল পদ্ধতির উপায় পাওয়া যায়।
জি-ম্যান বলেছেন 11 '

2
নেতিবাচকভাবে আমার প্রতিক্রিয়া মূল্যায়ন কেন? : /
ওরশিয়াস

3
দুর্দান্ত উত্তর। রিজেক্স ওআর রয়েছে এবং -ভেল বিকল্পটি সহায়ক ছিল।
কীর্ট কারসন

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