গ্রেপ: সমস্ত আউটপুট প্রদর্শন করুন তবে অনুসন্ধানের মিলগুলি হাইলাইট করুন


43

ব্যাশে, আমি যদি কোনও কমান্ড চালাতে চাই এবং কেবল নির্দিষ্ট প্যাটার্নের সাথে মেলে এমন আউটপুট লাইন প্রদর্শন করি তবে আমি এটিকে পাইপ করতে পারি grep,

টেস্টফাইলে ফাইল

hello
there
my
friends

হুকুম

$ cat testfile | grep 'hello'
hello #this will be highlightd

এটি অনুসন্ধানের ম্যাচটি হাইলাইট করবে এবং এটি পড়ে সম্পূর্ণ লাইনটি প্রদর্শন করবে। আমি লাইনটি ব্যবহার করতে পারি -Aএবং -Bসেই লাইনের আগে এবং পরে লাইনগুলি প্রদর্শন করতে পারি । আমার প্রশ্নটি হ'ল কমান্ডটি কার্যকর করা এবং সমস্ত আউটপুট স্বাভাবিক হিসাবে প্রদর্শন করা সম্ভব, তবে গ্রেপের মতো অনুসন্ধানের মিলগুলি হাইলাইট করা সম্ভব? সুতরাং আমার আউটপুট হবে

hello #highlighted
there
my
friends

উত্তর:


38

রঙের জিআরপি ব্যবহার করতে কেবল মিলিত প্যাটার্নগুলি হাইলাইট করতে তবে অন্যথায় আউটপুট পরিবর্তন করবেন না:

grep --color=always -e "^" -e "hello" testfile

প্রথম প্যাটার্নটি সমস্ত লাইনের সাথে মিলবে (সমস্ত লাইন মুদ্রিত হবে) দ্বিতীয় প্যাটার্ন (এবং নিম্নলিখিত কোনও নিদর্শন) মেলা পাঠটিকে রঙিনভাবে হাইলাইট করার কারণ ঘটায়।

যেহেতু প্রথম প্যাটার্নটি সমস্ত লাইনের সাথে মেলে তবে মুদ্রণযোগ্য চরিত্রের সাথে মেলে না, এটি কোনও রঙ হাইলাইট যুক্ত করে না তাই এটি হাইলাইট করা পাঠ্যের পাঠযোগ্যতার সাথে প্রতিযোগিতা / হস্তক্ষেপ করে না।


Zsh kubectl apply -k . | grep --color=always -e "^" -e "configured"এ কুবেক্টেল নিয়ে কাজ করে
মাইকেল কোল

ব্যাশে ব্যবহারের জন্য: হাইলাইট () {গ্রেপ - কালার = সর্বদা -e "^" -e $ *; }
জন

এটি ফ্রিবিএসডি-তেও কাজ করে, আপনাকে কেবল প্রথম এবং দ্বিতীয় প্যাটার্ন ( "^"দ্বিতীয় হতে হবে) অদলবদল করতে হবে।
মারিওন আর্নে

25

-zআপনার GNU গ্রেপ কমান্ডে বিকল্প যুক্ত করুন :

cat testfile | grep --color=always -z 'hello'

বা সংক্ষিপ্ত

grep --color=always -z 'hello' testfile

3
এটি একটি খুব অশোধিত হ্যাক। এটি সম্পূর্ণ ফাইলটিকে একক লাইন হিসাবে বিবেচনা করার প্রভাব ফেলে। অতএব, (1) যদি ফাইলটি খুব বড় হয়, এ মেমোরির পরিমাণ চলমান একটি সম্ভাবনা, এবং (2) হতে পারে ফাইলটি প্যাটার্ন ধারণ করে না এ সব , তারপর কিছুই আউটপুট হবে।
জি-ম্যান বলছেন 'ফিরতি মোনিকা'

এটি গ্রেপের কোন সংস্করণে সমর্থিত? গ্রেপ 2.5.4-তে, -জেড উপলভ্য বলে মনে হচ্ছে না ...
অ্যালেক্স

@ অ্যালেক্স: আমি জিএনইউ গ্রেপ সংস্করণ 2.6.3 ব্যবহার করেছি।
সাইরাস

2
@ জি-ম্যান: আরও রিসোর্স-সেভিং:grep --color "hello\|$" file
সাইরাস

@ সাইরাস: হ্যাঁ, এটি আরও ভাল উত্তর। দুর্ভাগ্যক্রমে, এটি মূলত এই প্রশ্নের bot779 টির উত্তরের সমতুল্য এবং আমি যে প্রশ্নগুলিতে লিঙ্ক করেছি সেগুলির কাছে গৃহীত উত্তরগুলির ( 1 এবং 2 ) প্রায় সমান ।
জি-ম্যান বলেছেন

5

পূর্ববর্তী উত্তরের অনুরূপ, আপনি সমস্ত $লাইনের শেষ ধরতে পারবেন :

cat testfile | grep --color -E "hello|$"

-E(বা --extended-regexp) এর অর্থ হল যে বিশেষ চরিত্রগুলি অবশ্যই এড়িয়ে চলবে \। এটি ব্যবহার করার সময়, |রেজেক্স "বা" শর্ত হিসাবে বিবেচিত হবে।

গ্রেপ |$সমস্ত লাইন ধরে এবং মুদ্রণ করবে যার শেষ রয়েছে, তবে যেহেতু a একটি গোপন অক্ষর, তাই এটি হাইলাইট করা যায় না।

হালনাগাদ:

আপনি করতে চান তাহলে সব আউটপুট প্রিন্ট, কিন্তু প্রস্থান কোড আসতে কিনা মিল পাওয়া যায়নি বা না হয়, আপনি Perl কমান্ড ব্যবহার করতে পারেন:

cat testfile | \
perl -pe 'BEGIN {$status=1} END {exit $status} $status=0 if /hello/;'

আপনি যদি শেড পছন্দ করেন - এখানে কোনও মিল খুঁজে পাওয়া যায় কিভাবে সমস্ত ম্যাচ + রিটার্ন প্রস্থান কোড হাইলাইট করার একটি উদাহরণ এখানে রয়েছে : https://askubuntu.com/a/1200851/670392


2

এটি জিএনইউ গ্রেপের পাশাপাশি ফ্রিবিএসডি-তে গ্রেপের সাথে কাজ করে:

grep --color=always 'hello\|$'

এটি "হ্যালো" বা ( \|) পাঠ্যের সাথে প্রতিটি লাইনের ( $) শেষে প্রিন্টযোগ্য নাল স্ট্রিংয়ের সাথে মেলে । এজন্য প্রতিটি লাইন মুদ্রিত হয় তবে কেবল "হ্যালো" হাইলাইট করা হয়।

আপনি ইতিমধ্যে --color=autoআপনার শেলটি কনফিগার করেছেন এমন সম্ভাবনা । তাহলে আপনার সম্ভবত উল্লেখ করার প্রয়োজন নেই --color=always:

grep 'hello\|$'

আপনি egrep(প্রসারিত নিয়মিত অভিব্যক্তি সহ) ব্যবহার করে আরও সহজ সংস্করণও করতে পারেন , যেখানে |"বা" এক্সপ্রেশনটির জন্য এড়িয়ে যাওয়ার দরকার নেই:

egrep 'hello|$'

এটি কীভাবে সমস্ত ইনপুট লাইন প্রদর্শন করবে তা উত্তর দেয় না।
ক্রিস পৃষ্ঠা

@ ক্রিসপেজ আমি বলব এটি করে: তাই প্রতিটি লাইন মুদ্রিত হয় তবে কেবল "হ্যালো" হাইলাইট হয়।
মারিওন আর্নে

0

উপরের শীর্ষ উত্তরে যুক্ত করা হচ্ছে। মন্তব্যে উল্লিখিত হাইলাইট}} ফাংশনটি কেবল তখনই কাজ করে যখন ডেটা এতে পাইপ করা হয়। নিখুঁত না হলেও নীচের উপন্যাসটি আরও কার্যকর:

alias greph="grep --color=always -e^ -e"

এটি কমান্ডগুলি যেমন:

greph foo bar.txt

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