লেজ-এফ রঙিন আউটপুট কিভাবে থাকে


263

আমি এমন কোনও সার্ভার লগ ফাইলের আউটপুটটি টেলতে সক্ষম হতে চাই যাতে এই জাতীয় বার্তা রয়েছে:

INFO
SEVERE

ইত্যাদি, এবং যদি এটি হয় SEVEREতবে লাইনটি লাল রঙে দেখান; যদি এটি হয় INFO, সবুজ। কোন tailআদেশের জন্য আমি কোন ধরণের উলেস সেটআপ করতে পারি যা আমাকে এটি করতে সহায়তা করবে?


উত্তর:


234

মাল্টিটেল চেষ্টা করে দেখুন । এটি একটি gebergeneralization tail -f। আপনি আলাদা উইন্ডোতে একাধিক ফাইল দেখতে পারেন, তাদের সামগ্রীর উপর ভিত্তি করে লাইন হাইলাইট করতে পারেন এবং আরও অনেক কিছু।

multitail -c /path/to/log

রঙগুলি কনফিগারযোগ্য। যদি ডিফল্ট রঙের স্কিম আপনার জন্য কাজ না করে তবে কনফিগার ফাইলে আপনার নিজের লিখুন। উদাহরণস্বরূপ, multitail -cS amir_log /path/to/logনিম্নলিখিতগুলির সাথে কল করুন ~/.multitailrc:

colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE

আর একটি সমাধান, আপনি যদি এমন কোনও সার্ভারে থাকেন যেখানে অ- মানক সরঞ্জামগুলি ইনস্টল করা tail -fঅসুবিধে হয় , তা হল রঙ নির্বাচন নিয়ন্ত্রণ ক্রম যুক্ত করার জন্য সেড বা অ্যাডের সাথে একত্রিত করা । tail -fএটির স্ট্যান্ডার্ড আউটপুটটি পাইপ হয়ে গেলেও দেরি না করে তার স্ট্যান্ডার্ড আউটপুটটি ফ্লাশ করা দরকার , সমস্ত বাস্তবায়ন এটি করে কিনা আমি জানি না।

tail -f /path/to/log | awk '
  /INFO/ {print "\033[32m" $0 "\033[39m"}
  /SEVERE/ {print "\033[31m" $0 "\033[39m"}
'

বা সেড সঙ্গে

tail -f /path/to/log | sed --unbuffered \
    -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
    -e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'

যদি আপনার সেড জিএনইউ সেড না \o033হয় তবে একটি আক্ষরিক পালানোর অক্ষর দ্বারা প্রতিস্থাপন করুন এবং সরান --unbuffered

তবুও অন্য সম্ভাবনা চালানো হয় tail -fএকটি ইন এ গিয়ে Emacs শেল বাফার এবং টিপে, Emacs এর সিনট্যাক্স রং ক্ষমতার ব্যবহার।


আপনি কিভাবে এটি দিয়ে করতে পারেন sed? (অলস হওয়ার জন্য এবং নিজে এটি আবিষ্কার না করার জন্য দুঃখিত!) তবে আপনি দয়া করে একটি sedউদাহরণও যুক্ত করুন ।
আলী

5
@ অলি শেড কম সুবিধাজনক কারণ এর মধ্যে পালানোর চরিত্রের জন্য সিনট্যাক্স নেই, আপনার এটির আক্ষরিক স্ক্রিপ্ট থাকা দরকার বা এটিতে কাজ করার জন্য শেল উদ্ধৃতি পদ্ধতি ব্যবহার করা উচিত I
গিলস

8
@ গিলস কোড tail -fসহ আপনার awkকোডে, যদি কোনও স্ট্রিংয়ের INFO এবং SEVERE না থাকে তবে স্ট্রিংটি মুদ্রিত হয় না। আমি কীভাবে বাকী স্ট্রিংগুলি মুদ্রণ করতে পারি ? (স্ট্রিংটি রঙিন করার দরকার নেই)
বেঞ্জামিন

6
@ বেঞ্জামিন ; nextআরও প্রসেসিং এড়াতে ক্লোজিং বন্ধনীগুলির আগে এবং 1 {print}শেষে একটি নতুন প্রসেসিং লাইন যুক্ত করুন (এর 1অর্থ সর্বদা)।
গিলস

3
sed --unbuffered -e 's/\(.*FATAL.*\)/\o033[1;31m\1\o033[0;39m/' -e 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*WARN.*\)/\o033[33m\1\o033[39m/' -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' -e 's/\(.*DEBUG.*\)/\o033[34m\1\o033[39m/' -e 's/\(.*TRACE.*\)/\o033[30m\1\o033[39m/' -e 's/\(.*[Ee]xception.*\)/\o033[1;39m\1\o033[0;39m/'
দিমিত্রিসান্ডালভ

118

জিআরসি , জেনেরিক কলরিজারটি দুর্দান্ত।

apt-get install grc

শুধু কর

grc tail -f /var/log/apache2/error.log

এবং উপভোগ করুন!

আপনি এটি গিটহাবেও পাবেন


2
এটি আমার প্রয়োজনের মতো: হালকা ও সহজ। রঙটি আমার লগের ধরণের জন্য (কাস্টম লগগুলি) ঠিক ঠিক নয় তবে যে কোনও রঙিন আমার জন্য লগ অনুসরণ করা সহজ করে তোলে।
রেন্নাত

আমার জন্য দেবিয়ান ত্রুটিগুলি নিয়ে 'গ্রাফিক' এর সাথে: ওএসআরআর: [এর্নো ১৩] অনুমতি অস্বীকার করেছে। এছাড়াও এটি পাইথন ইনস্টল হওয়ার উপর নির্ভর করে তাই এটি ইতিমধ্যে যদি না থাকে তবে এটি হালকা ওজনের নয়। আমি আরও ভাল কাজ করার জন্য 'সিসিজে' পেয়েছি, প্রাক্তন। 'লেজ -f -n 50 /var/log/starbound-server.log | ccze -A '।
ড্যানিয়েল সোকলোভস্কি

1
উবুন্টুতে জিআরসি ডিফল্ট সেটিংস সিসলোগ বা মেল.লগের জন্য দুর্দান্ত প্রদর্শন করে না। এটি কীভাবে কাস্টমাইজ করা যায় তা বোঝা সহজ নয়।
লিপ

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

4
এই nginx লগ উপর প্রশংসনীয় ভয়ানক দেখায় i.imgur.com/aJbIOfL.png
mpen

51

আপনি ccze তাকান আছে ? বিকল্পটি ব্যবহার করে -cবা আপনার কনফিগারেশন ফাইলে সরাসরি কিছু কীওয়ার্ডের ডিফল্ট রঙগুলি কাস্টমাইজ করার সম্ভাবনা রয়েছে । রঙিন করার পরে যদি আপনার পর্দা সাফ হয় তবে আপনাকে অবশ্যই বিকল্পটি ব্যবহার করতে হবে -A

সম্পাদনা:

আপনি যদি সত্যিই সম্পূর্ণ লাইনটি লাল রঙের রঙিন করতে চান তবে নীচের দিকেও চেষ্টা করে দেখতে পারেন:

$ tail -f myfile.log | perl -pe 's/.*SEVERE.*/\e[1;31m$&\e[0m/g'

\e[1;31mআপনাকে লাল রঙ দেবে। আপনি যদি কিছু হলুদ চান তবে ব্যবহার করুন \e[1;33mএবং সবুজ ব্যবহারের জন্য \e[1;32m\e[0mস্বাভাবিক পাঠ্যের রঙ পুনরুদ্ধার।


1
এটি ম্যাকের জন্য কাজ করে না - আমি এটি উত্সাহিত করছি কারণ এটি লিনাক্সে কাজ করে।
আমির আফগানি 21

আপভোটিং কারণ পার্ল / আনসিস ট্রিকটি নাও করতে পারে, সিসিজে করে।
শাদুর

1
এছাড়াও আপনি আপনার টার্মিনাল যোগ করে একটি সতর্কতা বা "বিপ" -এ পাঠান করতে পারেন \007তাই মত Regex শেষে: perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'। আপনি tmux এর সাথে ব্যবহার করছেন যদি এটি দুর্দান্ত কাজ করে, এক্ষেত্রে set -g bell-action anyযদি আপনার লগটি অন্য উইন্ডোতে লেজ করে থাকে, যখনই রেজেক্স কোনও ম্যাচ খুঁজে পায় সেই উইন্ডোটির নামটি সতর্কতা অবলম্বন করবে।
জোনিয়ামো

@ আমিরআফগানি এটি একটি লিনাক্স / ইউনিক্স এসই সাইট, সুতরাং আপনি কেন ম্যাকের জন্য কাজ করবেন বলে ভেবেছি তা নিশ্চিত নই।
BЈовић

1
@ বিЈовић ম্যাক একটি ইউনিক্স।
ক্রিস ডাউন

34

উন্নত লগ ফাইল ভিউয়ার, লানভকে দেখুন ।

lnav lnav

এটি বিভিন্ন ফর্ম্যাটগুলি প্রিন্টও করতে পারে।

আগে:

lnav-সামনে-প্রশংসনীয়

পরে:

lnav-প্রশংসনীয়


লগ বিশ্লেষণ সরঞ্জাম কিট সত্যিই দুর্দান্ত সংযোজন। পরামর্শের জন্য ধন্যবাদ.
প্যাট্রিক এলিয়েনাস

24

আপনি রংধনু ব্যবহার করতে পারেন , যা নিয়মিত অভিব্যক্তির উপর ভিত্তি করে রেখাগুলি রঙ করে:

rainbow --red='SEVERE.*' --green='INFO.*' tail -f my-file.log

এটি পূর্বনির্ধারিত কনফিগারেশনের সাথেও বান্ডলে আসে , উদাহরণস্বরূপ টমক্যাট লগগুলির জন্য:

rainbow --config=tomcat tail -f my-file.log

(অস্বীকৃতি: আমি লেখক)


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

1
rainbowঅসাধারণ. আপনি কি লেখক? যদি তা হয় তবে অনুগ্রহ করে আপনার উত্তরটি সম্পাদনা করুন।
বিশপ

হ্যাঁ, দুঃখিত, সম্পাদিত
নিকুলাজ

15

আপনি কলরটেল ব্যবহার করতে পারেন :

colortail -f /var/log/messages

2
উবুন্টু সংগ্রহস্থলগুলিতে +1 উপলব্ধ। আমি সিসির তুলনায় কলরেটেলের চেয়ে পছন্দ করি তা হ'ল আপনি নিখরচায় RegEx ব্যবহার করে আপনার নিদর্শনগুলি কাস্টমাইজ করতে পারেন। উপলভ্য রঙ: কালো, উজ্জ্বল ব্ল্যাক, সাদা, ব্রাইটহাইট, ম্যাজেন্টা, ব্রাইটমেজেন্টা, সায়ান, ব্রাইটসিয়ান, সবুজ, bright উজ্জ্বল গ্রিন, হলুদ, উজ্জ্বল, লাল, উজ্জ্বল, নীল, উজ্জ্বল। দুর্ভাগ্যক্রমে কমলার মতো গা bold় বা অন্যান্য রঙ সেট করার কোনও উপায় নেই।
লিপ

আমি আমার পূর্ববর্তী মন্তব্য সম্পর্কে একটি বক্তব্য সংশোধন করতে চাই: "উজ্জ্বল" + রঙের মধ্যে "সাহসী" অন্তর্ভুক্ত রয়েছে (কিছু রঙ আসলে আরও উজ্জ্বল দেখাবে)
লিপ

আমি এটি উবুন্টু 18 এ চেষ্টা করেছি এবং এটি কার্যকর হয়নি। সেটআপটি বহু-পদক্ষেপ এবং নির্দেশাবলী অস্পষ্ট। আমি যে অংশটি ভুল করেছিলাম তা এখনও নিশ্চিত নয়; শেষ অংশ পরিষ্কার পেতে পারেন "। এর পরে আপনি অন্য কিছু জায়গা কপি এবং কনফিগ ফাইলের উদাহরণ সম্পাদনা করতে পারেন আমি ~ / .colortail / তাদের আছে"
Dawoodjee

শুধুমাত্র সাথে কলরটেল ইনস্টল করুন apt install colortailএবং এটি ~ / .colortail / সম্পাদনা ছাড়াই কাজ করা উচিত।
কার্তিক এম

11

আরও মনে রাখবেন যে আপনি যদি কেবল একটি মিলে যাওয়া রেজেক্সের সন্ধান করতে চান তবে জিএনইউ গ্রেপ সহ --colorকাজ করবে - কেবল এটির tailমাধ্যমে আপনার আউটপুটটি পাইপ করুন ।


ওপি কেবল আউটপুট হাইলাইট করতে চেয়েছিল , এটি ফিল্টার করে না।
গ্রেপ

3
আপনি যদি বলেন grep  -A9999  -B9999 regex, এটি আপনার সারিটিতে 10,000 টির সাথে মিলে না যাওয়া লাইনগুলি না করে সমস্ত লাইন প্রদর্শন করবে। GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVEREশব্দটি SEVEREলাল রঙে দেখাতে , বাকিগুলি হলুদ বর্ণের বাকি কয়েকটি লাইন এবং সবুজগুলিতে (SEVERE নয়) লাইনগুলি (9999 অবধি) সবুজ বর্ণের মতো ব্যবহার করুন ।
জি ম্যান

আপনার পাইপের ক্রমের উপর নির্ভর করে আপনার --color=alwaysপরিবর্তে গ্রেপের দিকে যেতে হবে --color, তবে হ্যাঁ, এটি আমার বাক্সে লেজ (জিএনইউ কোর্টিলস) 8.27 ইনস্টল হয়েছে।
হ্যাঙ্ক শুল্টজ

7

মান কমান্ড পছন্দ থেকে রঙ্গিন আউটপুট পেতে grep, আপনি এই সেট করা উচিত aliasআপনার.bashrc

# User specific aliases and functions
alias grep='grep --color=auto'

আপনি যখন নিজের ফাইলে কোনও কিছু গ্রেপ করেন তখন আপনি এ জাতীয় কিছু দেখতে পান (তবে সম্ভবত এটি লাল):

[মূল @ লিনাক্সবক্স Mydir] # গ্রেপ "\ (INFO \ | SEVERE \)" "/ var / লগ / লগ-নেম
এই এন্ট্রি একটি হল তথ্য  
মারাত্মক এই এন্ট্রি একটি সতর্ক হয়!
এই এন্ট্রি একটি হল তথ্য 
এই এন্ট্রি একটি হল তথ্য 
মারাত্মক এই এন্ট্রি একটি সতর্ক হয়!

যদি ব্যবহার করতে চান tailবা awkচান যে রঙটি কোনও পাইপে বেঁচে থাকে তবে উপনামটি পর্যাপ্ত নয় এবং আপনার --color=alwaysপ্যারামিটারটি ব্যবহার করা উচিত , উদাহরণস্বরূপ:

[মূল @ লিনুবক্স মাইডির] # গ্রেপ --color = সর্বদা "\ (তথ্য F | SEVERE \)" "/ ভার / লগ / লগ-নেম | লেজ -ফ | awk '{মুদ্রণ $ 1}'
এই 
মারাত্মক
এই
এই
মারাত্মক

আপনি যদি awkগল্পটির সাথে রঙিন পাঠ্য চান তবে কিছুটা জটিল তবে আরও শক্তিশালী, উদাহরণস্বরূপ:

[রুট @ লিনুবক্স মাইডির] # টেল -f / ভার / লগ / বার্তা | awk '{if ($ 5 ~ / INFO /) মুদ্রণ "\ 033 [1; 32 মি" $ 0 "\ 033 [0 মি"; অন্যথায় যদি ($ 1 ~ / SEVERE /) "\ 033 [1; 31 মি" "$ 0" \ 033 [0 মি "ছাপায়; অন্যথায় মুদ্রণ করুন $ 0} '
এই এন্ট্রি একটি তথ্য সংরক্ষণ করুন  
এই এন্ট্রি একটি সতর্কতা!
এটি অন্য একটি প্রবেশদ্বার
এই এন্ট্রি একটি INFO
এটি অন্য একটি প্রবেশদ্বার
এই এন্ট্রি একটি তথ্য সংরক্ষণ করুন 
এই এন্ট্রি একটি সতর্কতা!

প্রতিটি রঙের নিজস্ব রঙে

অন্যান্য সরঞ্জামের সাহায্যে শেল থেকে রঙিন পাঠ্য পাওয়ার আরও অনেক উপায় রয়েছে এবং সেগুলি অন্য সদস্যদের দ্বারা বর্ণিত।



6

@UloBasEI উত্তরের ভিত্তিতে, আমি ব্যবহার করার চেষ্টা করেছি ... | perl ... | perl ..., তবে লিনাক্স পাইপটি কিছুটা ক্রেজি হয়ে যায় এবং খুব ধীর হয়। আমি যদি সমস্ত নিয়ম কেবল একটি perlকমান্ডে রাখি তবে এটি ঠিক আছে works

উদাহরণস্বরূপ, নীচে হিসাবে একটি perlফাইল colorTail.pl তৈরি করুন :

#!/usr/bin/perl -w

while(<STDIN>) {
    my $line = $_;
    chomp($line);
    for($line){
        s/==>.*<==/\e[1;44m$&\e[0m/gi; #tail multiples files name in blue background
        s/.*exception.*|at .*/\e[0;31m$&\e[0m/gi;  #java errors & stacktraces in red
        s/info.*/\e[1;32m$&\e[0m/gi; #info replacement in green
        s/warning.*/\e[1;33m$&\e[0m/gi; #warning replacement in yellow
    }
    print $line, "\n";
}

এটি হিসাবে ব্যবহার করুন:

tail -f *.log | perl colorTail.pl
tail -f *.log -f **/*.log | perl colorTail.pl

দ্রষ্টব্য: আপনি এটি মোবাএক্সটার্মেও ব্যবহার করতে পারেন ! কেবল মোবাএক্সটার্ম সাইট perlথেকে প্লাগ-ইন ডাউনলোড করুন ।


3
tail -f /var/log/logname | source-highlight -f esc -s log

7
source-highlightএকটি বহুলভাবে ইনস্টল করা কমান্ড নয়, সুতরাং আপনার কমপক্ষে প্রকল্পের সাইটের একটি লিঙ্ক দেওয়া উচিত।
গিলস

ফেডোরা 19 পাওয়া যায়
sjas

এবং উবুন্টু 12.10।
sjas

দেখতে সুন্দর লাগছে। এই তালিকার অন্যদের তুলনায় এটি বড় প্যাকেজ (26MB)। এটি ভাষার বিশাল তালিকা সমর্থন করে। এটি কনফিগার করা ফাইলগুলি: /usr/share/source-hightlight/*.lang (উবুন্টু) এ অবস্থিত কনফিগার করা যায়। আপনার যদি কিছু সাধারণ প্রয়োজন হয়, সিসিজে বা কোল্টাইল সহ যান।
লিপ

দেখে মনে হচ্ছে এটি উত্সাহের উপর নির্ভর করে, যা প্রায় 462MB
একসোস

3

একটি সমাধান যা কেবলমাত্র লগ- ফাইल्स নয়, সমস্ত ধরণের পাঠ্যকে রঙ করার জন্য কাজ করে এটি হ'ল পাইথন সরঞ্জাম, ' কলআউট '।

pip install colout
myprocess | colout REGEX_WITH_GROUPS color1,color2... [attr1,attr2...]

যেখানে রেগেক্সের গ্রুপ 1 এর সাথে মেলে এমন 'মাইপ্রোসেস' এর আউটপুটে কোনও পাঠ্য রঙ 1, রঙ 2 সহ গ্রুপ 2 ইত্যাদির সাথে বর্ণযুক্ত হবে etc.

উদাহরণ স্বরূপ:

tail -f /var/log/mylogfile | colout '^(\w+ \d+ [\d:]+)|(\w+\.py:\d+ .+\(\)): (.+)$' white,black,cyan bold,bold,normal

অর্থাত্ প্রথম রেজেক্স গোষ্ঠী (প্যারেনস) লগফাইলে প্রাথমিক তারিখের সাথে মেলে, দ্বিতীয় গ্রুপটি একটি পাইথন ফাইলের নাম, লাইন নম্বর এবং ফাংশনের নামের সাথে মেলে এবং তৃতীয় গ্রুপটি তার পরে আসা লগ বার্তার সাথে মেলে। এটির মতো দেখাচ্ছে:

রঙিন বিন্যাস সহ লগফিল

নোট করুন যে রেখা বা রেখাগুলির অংশগুলি যা আমার কোনও রেগেক্সের সাথে মেলে না তা এখনও প্রতিধ্বনিত হয়, সুতরাং এটি 'গ্রেপ - রঙ' এর মতো নয় - আউটপুট থেকে কোনও কিছুই ফিল্টার হয় না।

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


1
উত্স লগ ফাইলটি পরিবর্তন করে এমন কোনও উত্তর আমি দেখিনি
দানি_ল

@ দানি_ল ঠিক আছেন! আমি এটি লেখার সময়, আমি অবশ্যই এই এবং অনুরূপ প্রশ্নের মধ্যে পিছনে পিছনে ফিরতে গিয়ে নিজেকে বিভ্রান্ত করেছিলাম, যার অনেকগুলি উত্তর কীভাবে লগিং কনফিগার করতে হয় যে এএনএসআই অক্ষরগুলি সরাসরি লগ ফাইলটিতে লিখিত হয়েছিল। আমি আমার উত্তর থেকে সেই অভিযোগটি মুছে ফেলব।
জোনাথন হার্টলি

2

নির্লজ্জ প্লাগ: আমি TxtStyle নামে একটি সরঞ্জাম লিখেছি যা পূর্বে উল্লিখিত বিকল্পগুলির মতো কিছু করে similar আপনি নিম্নলিখিত হিসাবে এটি চালাতে পারেন:

tail -f /var/log/syslog | txts --regex '\d+'

আপনি কনফিগ ফাইলে ( ~/.txts.conf) নামযুক্ত শৈলীর সংজ্ঞা দিতে পারেন এবং এটির মতো ব্যবহার করতে পারেন:

ifconfig | txts --name ifconfig

( ifconfigশৈলী বাক্সের বাইরে সংজ্ঞায়িত করা হয়েছে)


1

আমি একটি বাশ ফাংশন লিখেছি যা তিনটি পরামিতি পর্যন্ত গ্রহণ করে এবং একটি পাঠ্য ফাইলে একটি গ্রেপ-মতো ফিল্টার করে এবং রঙিন স্ক্রিনে পাঠ্যকে আউটপুট করে।

আমি একটি লেজ ফাংশনও দেখতে চাই যা এটি করবে তবে এটি এখনও খুঁজে পেল না।

এই ফাংশনটিও উন্নত করা যেতে পারে - কীভাবে এটি আরও ভাল করা যায় সে সম্পর্কে আমি কোনও সহায়তার প্রশংসা করব।

function multigrep(){

    #THIS WORKS - Recreate this, using input parameters
    #sed -En '/(App)|(Spe)/p' ./flashlog.txt;

    filename="/Users/stevewarren/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt";
    paramString="";

    for element in "$@"
        do
            #echo $element;
            paramString="$paramString($element)|";
        done

    #TRIM FINAL | OFF PARAMSTRING
    paramString=${paramString:0:${#paramString}-1};

    #CREATE SED EXPRESSION - '/($1)|($2)|(...)/p'
    paramString="'/$paramString/p'";

    #CREATE SED FUNCTION, CALL ON FILE
    paramString="sed -En $paramString ./flashlog.txt"

    echo $paramString;
    echo "${txtbld}$(tput setaf 7)" > ./flashlog_output.txt;
    eval $paramString >> ./flashlog_output.txt;
    echo >> ./flashlog_output.txt;
    #cat ./flashlog_output.txt;

    cat ./flashlog_output.txt | while read LINE
    do

        [[  $1 && ${1-x} ]] && 
            if grep -q $1 <<<$LINE; then
                echo "$(tput setaf 3)$LINE"
            fi

        [[  $2 && ${2-x} ]] && 
            if grep -q $2 <<<$LINE; then
                echo "$(tput setaf 7)$LINE"
            fi


        [[  $3 && ${3-x} ]] && 
            if grep -q $3 <<<$LINE; then
                echo "$(tput setaf 6)$LINE"
            fi

    done
}

1

অবশ্যই!

8 কালারের ভেরিয়েবলের সংজ্ঞা অনুসারে আমি "এগ্রিপি" নামে একটি ফাংশন দীর্ঘকাল লিখেছিলাম। এটি কেবল "টেল-ফ" রঙিন ফাংশনের মতো পাইপযুক্ত কাজ করে।

1. সেটলাইন

প্রথমত, বর্ণ ভেরিয়েবলের ফাংশনটি প্রথমে কল করতে হবে:


setColors ()
{
set -a
which printf >/dev/null 2>&1 && print=printf || print=print # Mandriva doesn't know about printf

hide='eval tput civis'
show='eval tput cnorm'
CLS=$(tput clear)
bel=$(tput bel)

case ${UNAME} in
AIX)
# text / foreground
N=$(${print} '\033[1;30m')
n=$(${print} '\033[0;30m')
R=$(${print} '\033[1;31m')
r=$(${print} '\033[0;31m')
G=$(${print} '\033[1;32m')
g=$(${print} '\033[0;32m')
Y=$(${print} '\033[1;33m')
y=$(${print} '\033[0;33m')
B=$(${print} '\033[1;34m')
b=$(${print} '\033[0;34m')
M=$(${print} '\033[1;35m')
m=$(${print} '\033[0;35m')
C=$(${print} '\033[1;36m')
c=$(${print} '\033[0;36m')
W=$(${print} '\033[1;37m')
w=$(${print} '\033[0;37m')
END=$(${print} '\033[0m')

# background
RN=$(${print} '\033[6;40m')
Rn=$(${print} '\033[40m')
RR=$(${print} '\033[6;41m')
Rr=$(${print} '\033[41m')
RG=$(${print} '\033[6;42m')
Rg=$(${print} '\033[42m')
RY=$(${print} '\033[6;43m')
Ry=$(${print} '\033[43m')
RB=$(${print} '\033[6;44m')
Rb=$(${print} '\033[44m')
RM=$(${print} '\033[6;45m')
Rm=$(${print} '\033[45m')
RC=$(${print} '\033[6;46m')
Rc=$(${print} '\033[46m')
RW=$(${print} '\033[6;47m')
Rw=$(${print} '\033[47m')

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)
;;
*)
# text / foreground
n=$(tput setaf 0)
r=$(tput setaf 1)
g=$(tput setaf 2)
y=$(tput setaf 3)
b=$(tput setaf 4)
m=$(tput setaf 5)
c=$(tput setaf 6)
w=$(tput setaf 7)
N=$(tput setaf 8)
R=$(tput setaf 9)
G=$(tput setaf 10)
Y=$(tput setaf 11)
B=$(tput setaf 12)
M=$(tput setaf 13)
C=$(tput setaf 14)
W=$(tput setaf 15)
END=$(tput sgr0)

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)

# background
Rn=$(tput setab 0)
Rr=$(tput setab 1)
Rg=$(tput setab 2)
Ry=$(tput setab 3)
Rb=$(tput setab 4)
Rm=$(tput setab 5)
Rc=$(tput setab 6)
Rw=$(tput setab 7)
RN=$(tput setab 8)
RR=$(tput setab 9)
RG=$(tput setab 10)
RY=$(tput setab 11)
RB=$(tput setab 12)
RM=$(tput setab 13)
RC=$(tput setab 14)
RW=$(tput setab 15)
;;
esac

BLUEf=${B}
BLUE=${b}
REDf=${R}
RED=${r}
GREENf=${G}
GREEN=${g}
YELLOWf=${Y}
YELLOW=${y}
MANGENTAf=${M}
MANGENTA=${m}
WHITEf=${W}
WHITE=${w}
CYANf=${C}
CYAN=${c}

OK="${RG}${n}OK${END}"
KO="${RR}${n}KO${END}"
NA="${N}NA${END}"

COLORIZE='eval sed -e "s/{END}/${END}/g" -e "s/{HIGH}/${HIGH}/g" -e "s/{SMUL}/${SMUL}/g" -e "s/{RMUL}/${RMUL}/g" -e "s/{BLINK}/${BLINK}/g" -e "s/{REVERSE}/${REVERSE}/g" -e "s/{REVERSO}/${REVERSO}/g"'
LOWS=' -e "s/{n}/${n}/g" -e "s/{r}/${r}/g" -e "s/{g}/${g}/g" -e "s/{y}/${y}/g" -e "s/{b}/${b}/g" -e "s/{m}/${m}/g" -e "s/{c}/${c}/g" -e "s/{w}/${w}/g"'
HIGHS=' -e "s/{N}/${N}/g" -e "s/{R}/${R}/g" -e "s/{G}/${G}/g" -e "s/{Y}/${Y}/g" -e "s/{B}/${B}/g" -e "s/{M}/${M}/g" -e "s/{C}/${C}/g" -e "s/{W}/${W}/g"'
REVLOWS=' -e "s/{Rn}/${Rn}/g" -e "s/{Rr}/${Rr}/g" -e "s/{Rg}/${Rg}/g" -e "s/{Ry}/${Ry}/g" -e "s/{Rb}/${Rb}/g" -e "s/{Rm}/${Rm}/g" -e "s/{Rc}/${Rc}/g" -e "s/{Rw}/${Rw}/g"'
REVHIGHS=' -e "s/{RN}/${RN}/g" -e "s/{RR}/${RR}/g" -e "s/{RG}/${RG}/g" -e "s/{RY}/${RY}/g" -e "s/{RB}/${RB}/g" -e "s/{RM}/${RM}/g" -e "s/{RC}/${RC}/g" -e "s/{RW}/${RW}/g"'
# COLORIZE Usage:
# command |${COLORIZE} ${LOWS} ${HIGHS} ${REVLOWS} ${REVHIGHS}

set +a
}

2. উদাহরণস্বরূপ

এবং egrepi ফাংশন, কার্যকর এবং মার্জিত: 8 বা ততোধিক রঙের মধ্যে রঙ সাইক্লিং (আপনার প্রয়োজনীয়তা) এবং মন্তব্য সহ 3 টি ভিন্ন ইউনিক্স ওএসের অধীনে পরীক্ষা করা হয়েছে:


# egrepi() egrep with 8 REVERSE cyclic colorations on regexps almost like egrep
# egrepi 
# current script will work for KSH88, KSH93, bash 2+, zsh, under AIX / Linux / SunOS
egrepi ()
{
args=$*
# colorList=wBcgymrN                                                # KSH93 or bash 3+, not for AIX
# set -A color                                                  # needed with older sh
color[0]=$Rw; color[1]=$RB; color[2]=$Rc; color[3]=$Rg; color[4]=$Ry; color[5]=$Rm; color[6]=$Rr; color[7]=$RN; # this is the only one AIX solution
i=0
unset argsToGrep argsSedColor argsPerlColor

for arg in ${args}
do
    [ "${arg}" == "." ] && arg=\\.                              # if you wanna grep "."
    # color=R${colorList:((${RANDOM: -1:1})):1}                     # bash RANDOMized colors
    # color=R${colorList:$i:1} && let i++ && ((i==8)) && i=0                # KSH93 or bash 3+, not for AIX
    argsToGrep="${argsToGrep}${argsToGrep:+|}${arg}"
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${!color}&${w}#gI"            # AIX KSH88 do not recognise this fucking variable double expansion
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${color[$i]}&${w}#gI"         # AIX neither do include sed with Ignore case
    argsPerlColor="${argsPerlColor}${argsPerlColor:+,}s#${arg}#$n${color[$i]}$&${END}#gi"   # So: gotta use perl
    let i+=1 && ((i==8)) && i=0                             # AIX KSH88 do not recognise "let i++"
done
# egrep -i "${argsToGrep}" | sed ${argsSedColor} | egrep -v "grep|sed"              # AIX sed incompatibility with Ignore case
# (($# > 0)) && (egrep -i "${argsToGrep}" | perl -p -e ${argsPerlColor}) || cat         # this line colors & grep the words, will NOT act as "tail -f"
(($# > 0)) && (perl -p -e ${argsPerlColor}) || cat                      # this line just colors the words
}

3. ব্যবহার

কমান্ড | egrepi word1 .. wordN



1

নিশ্চিতভাবেই জিআরসি!

আপনার কলারগুলিকে ফাইলটিতে রেজেেক্স সহ কাস্টমাইজ করুন: g .grc / conf.tail (বা আপনি যে নামেই চান)

regexp=.*(select .*)$
colours=unchanged,cyan
=====
regexp=.*(update .*)$
colours=unchanged,bold yellow
=====
regexp=.*(insert .*)$
colours=unchanged,bold yellow
=====
regexp=.*(emp=\d+).*
colours=unchanged,reverse green
=====
regexp=.*http.*/rest/contahub.cmds.(.*?)/(\w*).*$
colours=unchanged,green,magenta
=====
regexp=.*http.*/M/.*\.(.*?Facade)/(\w*).*$
colours=unchanged,underline green,underline magenta

কমান্ড লাইন:

grc -c conf.tail tail -f log/tomcat/catalina.out

ফলাফল: স্ক্রিনশট

জিআরসি কনফিগার করার জন্য তথ্য: https://github.com/manjuraj/config/blob/master/.grc/sample.conf


1

রঙের কোডগুলি হিসাবে, আমি টিপুট ব্যবহার করব:

red=$( tput -Txterm setaf 1 )
norm=$( tput -Txterm sgr0 )
bold=$( tput -Txterm bold )

রেফারেন্সের জন্য দেখুন: man tput

তারপর:

tail -F myfile.log | sed "s/\(.ERROR.*\)/$red$bold\1$norm/g"

দুর্দান্ত, ধন্যবাদ স্ট্যান্ডার্ড শেল ফাংশনগুলির সাথে একটি কবজির মতো কাজ করে।
ভাকুইন্টানস

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