গ্রেপ: 2 কীওয়ার্ড কীভাবে রঙ করবেন?


12

আমি 1 কমান্ড ব্যবহার করে কী কীভাবে 2 কীওয়ার্ড গ্রেপ করতে জানি তা কিন্তু আমি কেবল তার মধ্যে একটির আউটপুট রঙিন করতে পারি। আমার আদেশ এখানে:

grep 'keyword1' file.log | grep 'keyword2'

শুধুমাত্র keyword2হাইলাইট করা হয়। আমি কীভাবে keyword1একই সাথে হাইলাইট করতে পারি ?

উত্তর:


15

grepকমান্ড একটি গ্রহণ --color=alwaysবিকল্পটি যাতে আপনি ব্যবহার করতে পারেন

grep 'keyword1' file.log --color=always | grep 'keyword2'

জার্টভিডিজক যেমন উল্লেখ করেছেন , এই কমান্ডটি অদক্ষ হতে পারে তবে এটি কীওয়ার্ড 1 এবং কীওয়ার্ড 2 উভয় ধারণ করে এমন সমস্ত রেখার সন্ধান করবে। আপনি যদি তাদের বিভিন্ন রঙে হাইলাইট করতে চান তবে আপনি ব্যবহার করতে পারেন

grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'

যা নীচে কীওয়ার্ড 2 হাইলাইট করবে। mtঅংশ মানে হল যে grepএই ব্যবহার ম্যাচিং হাইলাইট করা পাঠ্য হবে সিএসআই কোড , এবং 01;34মানে হলো "স্বাভাবিক পটভূমিতে সাহসী নীল ফোরগ্রাউন্ড"।


1
ব্যবহারের ক্ষেত্রে বিস্তারিত ব্যাখ্যা এবং কাস্টমাইজেশন বিকল্পগুলির জন্য +1!
gertvdijk

মজার, যখন আমি এটি দিয়ে চেষ্টা করি: গ্রেপ -আর - রঙ = সর্বদা কীওয়ার্ড 1। | গ্রেপ কীওয়ার্ড 2 // কেবলমাত্র প্রথম কীওয়ার্ড হাইলাইটলাইট হয়। আমি কীভাবে আপনার উত্তরকে পুনরাবৃত্ত অনুসন্ধানের সাথে কাজের সাথে মানিয়ে নিতে পারি?
টেন লেফটফিনজার্স

1
এটা বিজোড়, grep -R --color=always keyword1 . | grep keyword2কাজ করা উচিত। (যেমন দ্বিতীয় বংশীধ্বনিতুল্য দ্বারা হিসাবে আবার আউটপুট পুনঃনির্দেশিত হচ্ছেন grepমধ্যে less -R)? যদি তা হয় তবে --color=alwaysআপনাকে দ্বিতীয়টিও যুক্ত করতে হবে।
ড্যানিয়েল এইচ

দুর্দান্ত উত্তর! উভয়কেই হাইলাইট করার --color=autoজন্য, দ্বিতীয়টির জন্য একটি প্রয়োজন হবে grep, ঠিক তার পরে 'keyword2'
লুইস

@ লুইস হ্যাঁ, আপনি ঠিক বলেছেন যে গ্রেপ কমপক্ষে প্রায়শই কোনও রঙের ডিফল্ট থাকে (যদিও এটি একটি কনফিগার-টাইম বিকল্প হতে পারে? আমি মনে করি না যে 2013 সালে এটি ছাড়াই আমার মেশিনে কাজ করা হয়েছিল) ...! আমি --color=alwaysউত্তরে যুক্ত করেছি, কারণ আপনি এটি lessবা অন্য কিছুতে পাইপ করতে চাইতে পারেন ।
ড্যানিয়েল এইচ

3

অন্য কোনও উদাহরণে পাইপ না করে প্রকৃত নিয়মিত প্রকাশের চেষ্টা করুন grep, যেমন:

grep -E "\<foo\>.*\<bar\>" file

দুর্ভাগ্যক্রমে, এই ক্রমটি কীওয়ার্ডগুলি কেবল এই ক্রমে মেলে তার সাথে এটি মিলছে lines যাইহোক, grepআপনার প্রশ্নে ব্যবহারটি বরং অদক্ষ এবং আপনার এড়ানো উচিত। @DanielH উত্তর সম্ভবত আপনার ক্ষেত্রে জন্য প্রায় কাছাকাছি আরো সহজবোধ্য।

একটি বা 'কীওয়ার্ডের মিল' এর জন্য, আমি এটি নিয়মিত ব্যবহার করি:

grep -E "(foo|bar)" file

1
আমি মনে করি যে ওপি উভয় কীওয়ার্ড সমন্বিত কেবল রেখাগুলি চায় (আপনি যে কমান্ডটি দিয়েছেন তা সমস্ত লাইন দেয় যা দুটিতে একটি থাকে))
ড্যানিয়েল এইচ

@ দানিএলএইচকে নির্দেশ করার জন্য ধন্যবাদ আমি আমার উত্তর আপডেট করেছি।
gertvdijk

Foo বারের আগে আসলেই কি এটি এখনও কাজ করে না? আমি জানি না এর চেয়ে ভাল উপায় আছে কিনা foo.*bar|bar.*foo, বা যদি এই মামলার জন্য এমনকি এটি প্রয়োজনীয় হয় (যা লগ ফাইল হিসাবে উপস্থিত হয় যা সম্ভবত কীওয়ার্ডগুলির জন্য একটি মানক অর্ডার থাকবে)। আপনি নিজের আপডেট করার আগে আমি আমার উত্তরটি যুক্ত করেছিলাম, তবে শৃঙ্খলিত হওয়া grepসত্যিই প্রয়োজনের মতো পরিস্থিতিতে (বা অন্য কোনও সময় রঙিন আউটপুট টার্মিনালে প্রেরণ করা উচিত নয়, যেমন grep | less -R) আমি এটিকে ঘিরে রাখব ।
ড্যানিয়েল এইচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.