গ্রেপের জন্য প্রসঙ্গ "গ্রুপ-বিভাজক" হিসাবে খালি লাইনটি ব্যবহার করা


12

আমার প্রসঙ্গের সাথে গ্রেপ আউটপুট দরকার, রঙে, এবং গ্রুপ বিভাজক হিসাবে ফাঁকা লাইন। এই প্রশ্নে , আমি কীভাবে কাস্টমকে সংজ্ঞায়িত করতে শিখেছি group-separatorএবং আমি আমার গ্রেপ কমান্ডটি এভাবে তৈরি করেছি:

grep --group-separator="" --color=always -A5

তবে গ্রুপ বিভাজকটি আসলে খালি নয়, পরিবর্তে এটিতে এখনও রঙ কোড রয়েছে (যেমন [[36m[[K[[m[[K)। এটি কারণ আমি ব্যবহার করছি --color=always। তবে আমার গ্রেপ কমান্ডে আমার রঙ দরকার, এবং ফাঁকা লাইন হওয়ার জন্য আমার বিভাজক প্রয়োজন (আরও প্রক্রিয়া করার জন্য)

আমি এই দুটি শর্তকে কীভাবে একত্রিত করতে পারি?


আপনার যদি --color=alwaysম্যাচটি রঙের সাথে মুদ্রণ করা হয় এবং --group-separator=""আপনার খালি স্ট্রিংটিতে সেট থাকে তবে আপনার মিলিত গোষ্ঠীর পরে একটি ফাঁকা লাইন পাবেন। --group-separator=""কোনও নির্দিষ্ট রঙের অব্যাহতি নয়, খালি স্ট্রিং দিয়ে আবার চেষ্টা করুন এবং তারপরে কী কাজ করছে না তা ব্যাখ্যা করুন।
বিএসডি

ওপেন চেষ্টা করেছে তিনি যে কোডটি উল্লেখ করেছেন তা টার্মিনাল আউটপুটে দৃশ্যমান নয়। od -cফাঁকা লাইনগুলিতে উপস্থিত লুকানো অক্ষরগুলি দেখতে আউটপুট অতিক্রম করার চেষ্টা করুন ।
টেরডন

@ ইটারডন, আমি এটি দিয়ে দেখছি od
বিএসডি

উত্তর:


9

আপনি যদি GREP_COLORSপরিবেশের পরিবর্তনশীল ব্যবহার করেন তবে আপনি প্রতিটি ধরণের ম্যাচের জন্য নির্দিষ্ট রঙগুলি নিয়ন্ত্রণ করতে পারেন। man grepচলক ব্যবহার ব্যাখ্যা করে।

নিম্নলিখিত কমান্ডটি একটি রঙিন ম্যাচ মুদ্রণ করবে, কিন্তু এই গ্রুপে পৃথককারী লাইনে কিছুই নেই, কেবল একটি ফাঁকা রেখা। পাইপযুক্ত odআপনি ম্যাচের আগে এবং পরে রঙ পালাতে দেখতে পাবেন তবে কেবল \n\nগ্রুপ বিভাজনে।

GREP_COLORS='ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=' grep --group-separator="" --color=always -A5

উপাদানটি আনসেট করা seগোষ্ঠী বিভাজকটিতে রঙের মুদ্রণ দমন করবে।

যেহেতু উপরের আমার উদাহরণটি GREP_COLORSনীচের জন্য সমস্ত ডিফল্ট মান ব্যবহার করেছে সেগুলিও কাজ করবে।

GREP_COLORS='se=' grep --group-separator="" --color=always -A5

যদি আপনি কোনও bashশেল ব্যবহার না করেন তবে আপনাকে GREP_COLORSপ্রথমে রফতানি করতে হবে ।


5

ব্যক্তিগতভাবে, আমি পার্ল ব্যবহার করে না, না grep। আমার কাছে একটি ছোট স্ক্রিপ্ট রয়েছে যা প্রদত্ত প্যাটার্নটি রঙে হাইলাইট করবে:

#!/usr/bin/env perl
use Getopt::Std;
use strict;
use Term::ANSIColor; 

my %opts;
getopts('hsc:l:',\%opts);
    if ($opts{h}){
      print<<EoF; 
DESCRIPTION

$0 will highlight the given pattern in color. 

USAGE

$0 [OPTIONS] -l PATTERN FILE

If FILE is ommitted, it reads from STDIN.

-c : comma separated list of colors
-h : print this help and exit
-l : comma separated list of search patterns (can be regular expressions)
-s : makes the search case sensitive

EoF
      exit(0);
    }

my $case_sensitive=$opts{s}||undef; 
my @color=('bold red','bold blue', 'bold yellow', 'bold green', 
           'bold magenta', 'bold cyan', 'yellow on_magenta', 
           'bright_white on_red', 'bright_yellow on_red', 'white on_black');
## user provided color
if ($opts{c}) {
   @color=split(/,/,$opts{c});
}
## read patterns
my @patterns;
if($opts{l}){
     @patterns=split(/,/,$opts{l});
}
else{
    die("Need a pattern to search for (-l)\n");
}

# Setting $| to non-zero forces a flush right away and after 
# every write or print on the currently selected output channel. 
$|=1;

while (my $line=<>) 
{ 
    for (my $c=0; $c<=$#patterns; $c++){
    if($case_sensitive){
        if($line=~/$patterns[$c]/){
           $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge;
        }
    }
    else{
        if($line=~/$patterns[$c]/i){
          $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige;
        }
      }
    }
    print STDOUT $line;
}

যদি আপনি এটি আপনার পথে সংরক্ষণ করেন তবে colorচালিয়ে আপনি আপনার পছন্দসই আউটপুট পেতে পারেন

grep --group-separator="" --color=never -A5 foo | color -l foo

এইভাবে, স্ক্রিপ্টটি আপনার জন্য ম্যাচগুলি রঙ করছে এবং আপনি grepরং ব্যবহার না করার এবং এই সমস্যাটি এড়াতে বলতে পারেন।


দয়া করে, এটি একটি যোগ @terdon সারকথা , এবং এটি এখানে ফিরে লিঙ্ক, তাই এটি কোন বিবর্তন অনুসরণ করতে সহজ হবে।
রাফারিনো

@ রাফারিনো হ্যাঁ, আমি আশঙ্কা করছি যে আমি সত্যিই এই জাতীয় সরঞ্জাম ব্যবহার না করি। আমার কাছে আসলে একটি সংগ্রহস্থল রয়েছে তবে এটি খুব কমই আপডেট হয়। আমি একটি সেট আপ করার জন্য অর্থ রাখি এবং এটি সঠিকভাবে ব্যবহার করি তবে আমি কখনই এটির কাছে আসছি বলে মনে হয় না।
টেরডন

সুতরাং আমি ঠিক এখানে একটি ছোট সংশোধন করেছি, দুঃখের সাথে, আমার সর্বনিম্ন সম্পাদনা @terdon এ পৌঁছাতে একটি মন্তব্য অন্তর্ভুক্ত করা দরকার
রাফারিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.