একই স্ট্রিং কিন্তু একই সাথে একাধিক ফাইলের জন্য গ্রেপ কিভাবে করবেন?


57

আমার কাছে লগ ফাইলগুলির একটি সেট রয়েছে যা আমার পর্যালোচনা করা দরকার এবং আমি একই ফাইলগুলিতে একবারে নির্দিষ্ট স্ট্রিংগুলি অনুসন্ধান করতে চাই এটি কি সম্ভব? বর্তমানে আমি ব্যবহার করছি

grep -E 'fatal|error|critical|failure|warning|' /path_to_file

আমি কীভাবে এটি ব্যবহার করব এবং একবারে একাধিক ফাইলের স্ট্রিং সন্ধান করব? যদি এটি এমন কিছু হয় যা স্ক্রিপ্ট করার দরকার হয় তবে কেউ কি এটি করার জন্য একটি সাধারণ স্ক্রিপ্ট সরবরাহ করতে পারে?


2
grepএকাধিক ফাইল যুক্তি নিতে পারে can
jw013

উত্তর:


61
grep -E 'fatal|error|critical|failure|warning|' *.log

আমি কীভাবে grepডিরেক্টরিগুলি এড়িয়ে যেতে পারি , তবে তবুও সমস্ত ফাইল পুনরাবৃত্তভাবে চেক করব? grep -E 'text' **/*কাজ করে, তবে প্রতিটি উপ-ডিরেক্টরিতে ত্রুটি বার্তা দেয় (এবং তারপরে
সেগুলির

4
@ জর্ন, সত্যই আপনার একটি নতুন প্রশ্ন জিজ্ঞাসা করা উচিত, তবে ব্যবহার করুনfind . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
ওয়াইল্ডকার্ড

20

আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'

এটি .logএক্সটেনশন হিসাবে প্রতিটি ফাইল সন্ধান করবে এবং grepকমান্ডটি প্রয়োগ করবে ।


এটি খুব সহজ ছিল :) আসলে আমার সমস্ত ফাইল। লগ তাই "গ্রেপ-ই 'মারাত্মক | ত্রুটি | সমালোচনা | ব্যর্থতা | সতর্কতা' *। লগও কার্যকর কাজ করে Thanks ধন্যবাদ!
ব্যবহারকারীর 3030

1
বোধগম্যতা / অভিযোজন ব্যবহারকারী কত বড় প্রচেষ্টা 53029!
গিলস কোনেট

1
আপনি যখন ব্যবহার করতে পারেন তখন ফাইলনামগুলিতে হোয়াইটস্পেসে গুরুতর ভাঙনেরxargs সম্ভাবনা কেন ? find . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
ওয়াইল্ডকার্ড

16

যদি এটি সহজ হয় তবে আপনি প্রতিটি ফাইল একের পর এক নির্দিষ্ট করতে পারেন।

grep -E 'fatal|error|critical|failure|warning' file1.log file2.log 

2
এত সহজ, তবে এটি খুব দীর্ঘ সময়ের জন্য অনুসন্ধান করা হয়েছিল: 0
অ্যাডাম হিউজেস

3

আপনার যদি নিয়মিত অভিব্যক্তি দ্বারা পুনরুদ্ধার করা যায় না এমন ফাইলের নামের একটি স্বেচ্ছাসেবী সেটটিতে গ্রেপ করা দরকার:

grep -E 'fatal|error|critical|failure|warning|' `cat<<FIN
> file1
> file2
> ...
> filen
> FIN`

একের পর এক ফাইলের নাম পেস্ট করার সুবিধা কী? আপনি কোনও পাঠ্য ফাইলে ফাইলের নাম তালিকাটি সংকলন করতে পারেন এবং তারপরে এটি আটকে দিতে পারেন।


1

আপনি যদি সাব-ডাইরেক্টরি ফাইলগুলিতেও পুনরাবৃত্তি অনুসন্ধান করতে চান তবে আপনি নীচের কমান্ডটি ব্যবহার করতে পারেন

এটি উপ-ডিরেক্টরি ফাইলগুলিতেও পুনরাবৃত্তভাবে অনুসন্ধান করবে

egrep -r "string1|string2" pathname


0

এটি একটি খুব সময় সাশ্রয়ী মূল্যের কাজ ছিল। এবং হ্যাঁ, এটি অবশ্যই স্ক্রিপ্ট করার দরকার ছিল যদি আপনি একই সাথে একাধিক ভিন্ন লগে একাধিক স্ট্রিং অনুসন্ধান করতে চান। তবে আমাকে সম্প্রতি এটি করতে হয়েছিল এবং এটি বেশ বেদনাদায়ক ছিল। তবুও, এটি সম্পন্ন এবং প্রস্তুত এবং নিম্নলিখিত লিঙ্ক থেকে ডাউনলোড করা যেতে পারে:

লগ সন্ধান স্ক্রিপ্ট ডাউনলোড

এটি যেভাবে কাজ করে তা বেশ সহজ।

দৃশ্য 1: শুধুমাত্র একটি লগ ফাইলে একটি স্ট্রিং পর্যবেক্ষণ করুন

./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open' '.'  1 2 single_errCheck -ndshow

দৃশ্য 2: কেবলমাত্র একটি লগ ফাইলে একাধিক স্ট্রিং পর্যবেক্ষণ করুন

./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.'  1 2 multi_errCheck -ndshow

পরিস্থিতি 3: একাধিক লগ ফাইলগুলিতে একক / একাধিক স্ট্রিং পর্যবেক্ষণ করুন

./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'can.*t.*open_P_ntpd.*stat' '.'  1 2 multi_err_multi_logCheck -ndshow

নোট:

_P_ এর অর্থ ও - এটি পাইপের প্রতিস্থাপন করে "|" প্রতীক কারণ এটির কম সম্ভাবনা রয়েছে আপনাকে "_P_" যুক্ত স্ট্রিংটি অনুসন্ধান করতে হবে। আপনি যদি "_P_" টাইপ করতে চান না, আপনি কেবল "|" দিয়ে _P_ কে প্রতিস্থাপন করতে পারেন।

এই স্ক্রিপ্টটি ব্যবহার করার সময়, আপনি যে প্যারামিটারগুলি ঘন ঘন পরিবর্তন করবেন তা হ'ল:

  1. লগ ফাইল বা লগ ডিরেক্টরি নিরীক্ষণ করা
  2. একটি লগ ফাইল অবশ্যই এটি পর্যবেক্ষণ করার জন্য বয়স হতে হবে..আমি 60 মিনিটেরও বেশি টাইমস্ট্যাম্পযুক্ত কোনও লগ ফাইল নিরীক্ষণ বা আবিষ্কার করব না
  3. আপনি যে স্ট্রিং / গুলি / প্যাটার্নগুলি দেখতে চান তা
  4. ট্যাগ - এটি আপনার সরবরাহ করতে হবে শেষ যুক্তির দ্বিতীয়। এটি / var / tmp / logXray এর অধীনে আপনি যে লগ ফাইলটি পর্যবেক্ষণ করছেন সে সম্পর্কে পরিসংখ্যান রেকর্ড করে
  5. লগ অপশন - প্রদর্শন - আপনি বর্ণিত প্যাটার্নগুলির সাথে মিলিত লগগুলি থেকে প্রবেশগুলি আউটপুট করতে চান তবে এটি ব্যবহার করতে চান এমন প্যারামিটার। আপনি যদি পাওয়া প্রতিটি প্যাটার্নের মোট গণনা দেখতে চান তবে কেবল '-ndfowmul' এর সাথে '-দর্শন' প্রতিস্থাপন করুন।

'-ফ্যান্ডমন্ডল' ব্যবহার করার সময়, আপনি এর মতো একটি আউটপুট পাবেন:

[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.'  1 2 blahblahA -ndfoundmul
OK: [/var/log/messages][1]  /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0) 

মূল পোস্টারের ইস্যুটির সমাধান: একাধিক লগ ফাইলগুলিতে একাধিক স্ট্রিংয়ের জন্য স্ক্যান করুন

./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'fatal_P_error_P_critical_P_failure_P_warning' '.'  1 2 multierr_logCheck -ndshow

ওএসস: এটি উবুন্টু এবং রেড হাটে পরীক্ষা করা হয়েছিল


0
grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto

এটি 'মারাত্মক বা ত্রুটি বা সমালোচনামূলক বা ব্যর্থতা বা সতর্কতা বা অনুসন্ধান-স্ট্রিং' অনুসন্ধান করবে নাম দিয়ে 'লগ- ফাইল ' দিয়ে? এবং প্রসারিত 'লো ' * পথে / পথে / থেকে / দ্য / ফাইল / এবং অনুসন্ধানের স্ট্রিংটিকে এলোমেলো রঙ এবং প্রিন্ট লাইন নম্বরটি পাওয়া গেছে number


অবশ্যই এটি একটি কার্যকরী উত্তর, তবে ব্যবহারকারী একটি প্যাটার্ন ব্যবহার করে অনুসন্ধানের জন্য বলেছে, আপনি একটি নির্দিষ্ট অনুসন্ধান স্ট্রিং ব্যবহার করে উত্তর দিয়েছেন। দুঃখিত, তবে যে বিষয়গুলির জন্য জিজ্ঞাসা করা হয়নি সেগুলি যুক্ত করা, যেমন লাইন-নম্বরকরণ এবং ফলাফলের বর্ণের ফলে উত্তর আরও বেশি উপকারী হতে পারে না। কিন্তু অন্য কোন প্রশ্ন যে সম্ভবত আপনার কবূল হতে পারে হতে হবে grepদক্ষতা তাই শুভকামনা আপনার ব্যবহারের ক্যারিয়ারে!
zagrimsan

@ জাগ্রিমসান পয়েন্টটি নেওয়া হয়েছে, আমি -E 'মারাত্মক | ত্রুটি | সমালোচনা | ব্যর্থতা | সতর্কতা |' যোগ করেছি এটা পরম।
ওবায়দ

আরে, তিনি সুনির্দিষ্টভাবে একাধিক ফাইল চেয়েছিলেন, অনুসন্ধানের ধরণ নয়। প্রশ্নটি আবার পড়ুন।
ওবায়দ

প্রশ্ন থেকে উদ্ধৃতি: "সুনির্দিষ্ট স্ট্রিংগুলি অনুসন্ধান করুন" এবং প্রশ্নটি অনুসন্ধানের প্যাটার্নটি দেখায় (তার সাথে মেলে একাধিক স্ট্রিং রয়েছে) uses আপনি ঠিক বলেছেন যে যদিও তিনি সত্যই জিজ্ঞাসা করছেন তার থেকে প্রশ্নের শিরোনাম কিছুটা দূরে রয়েছে। বিটিডাব্লু, -Eএবং -Fএকই সাথে ব্যবহার করা যাবে না, তারা বিরোধী (টাইপো)?
জাগ্রিমসান

0

জিগারগন্ধির উত্তরটি তারকাচিহ্নযুক্ত ওয়াইল্ডকার্ডের ব্যবহার দেখায়। এর মধ্যে আরও অনেকগুলি রয়েছে এবং আপনি এগুলি এখানে বা দৌড়াদৌড়ি করে দেখতে পারেন man 7 glob

তাদের মধ্যে যেটি আমি দরকারী পেয়েছি সেটি হ'ল এর সাথে সীমাবদ্ধতার মিল []। যে সিস্টেমে আমি কাজ করি তা ক্রমানুসারে সংখ্যাযুক্ত লগ ফাইলগুলি উত্পাদন করে যেমন product.log.1 product.log.2 ... product.log.200, 3 বা 4 সিক্যুয়াল ফাইলগুলিতে একটি কমান্ড দিয়ে গ্রেপ করা সহজ তবে আরও বেশি নয়। তাই এটা

grep 'whatever' product.log.[5-7]

product.log দিয়ে শেষ হওয়া সমস্ত ফাইলের জন্য গ্রেপ করা হবে। ৫, or বা 7.. ওয়াইল্ডকার্ডের শেষে থাকা দরকার নেই তাই ফ্লিকফ্ল্যাফের উত্তরটি সরল করা যায়

grep -E 'fatal|error|critical|failure|warning' file[1,2].log

আরও মনে রাখবেন যে এই ওয়াইল্ডকার্ডগুলি যেমন অন্যান্য কমান্ডগুলিতে ব্যবহার করা যেতে পারে cp


0

যদি ফাইলগুলি একই ফোল্ডার হয় তবে আপনি কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে পারেন।

একটি উদাহরণ দেখুন

grep -E 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}

আপনি যদি গ্রেপটিতে একটি এস যুক্ত করেন তবে ফাইলটি হারিয়ে যাওয়ার বিষয়ে ত্রুটিগুলি দমন করে

grep -sE 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}

ওএস পার্থক্যের কারণে এটির মধ্যে একটি ফাইলের তুলনায় এটি একটি ফাইলে রয়েছে এমন একাধিক ডিস্ট্রোস জুড়ে কাজ করে এমন কমান্ডগুলি করার জন্য আমি নিজেই এটি পরীক্ষা করছিলাম।

মেল লগ

sudo grep -is bob@example.com /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog}

আর্কাইভড মেল লগগুলি zgrep অনুপস্থিত .gz সতর্কতা দমন করতে 2> / dev / নাল ব্যবহার করে

sudo zgrep -is bob@example.com /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null

রেফারেন্স: পুরো পথটি টাইপ না করে ডিরেক্টরিতে একাধিক ফাইল উল্লেখ করার কোনও উপায় আছে কি?

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