bash - रंगीन grep-हाइलाइट किए गए मैचों के साथ पूरी फ़ाइल को देखते हुए




shell colors (10)

मुझे grep का --color=always झंडा लगता है कि यह बहुत उपयोगी है। हालांकि, grep केवल मैचों के साथ लाइनों को प्रिंट करता है (जब तक आप संदर्भ रेखाओं के लिए नहीं पूछते)। यह देखते हुए कि प्रत्येक पंक्ति में प्रिंट करने के लिए एक मैच होता है, हाइलाइटिंग उतनी क्षमता को जोड़ती नहीं है जितनी यह हो सकती है।

मैं वास्तव में एक फाइल को cat देना चाहता हूं और पूरी फ़ाइल को हाइलाइट किए गए पैटर्न मैचों के साथ देखना चाहता हूं।

क्या कोई तरीका है कि मैं जीआरपी को प्रत्येक लाइन को पढ़ने के लिए कह सकता हूं कि क्या कोई मैच है या नहीं? मुझे पता है कि मैं फ़ाइल की हर पंक्ति पर grep चलाने के लिए एक स्क्रिप्ट लिख सकता हूं, लेकिन मैं उत्सुक था कि यह मानक grep साथ संभव था।


आप https://github.com/kepkin/dev-shell-essentials से मेरी highlight स्क्रिप्ट का उपयोग कर सकते हैं

यह grep से बेहतर है क्योंकि आप प्रत्येक मैच को अपने रंग से हाइलाइट कर सकते हैं।

$ command_here | highlight green "input" | highlight red "output"


आप उपनाम भी बना सकते हैं। इस फ़ंक्शन को अपने .bashrc (या .bash_profile ओएसएक्स पर) में जोड़ें

function grepe {
    grep --color -E "$1|$" $2
}

अब आप इस तरह के उपनाम का उपयोग कर सकते हैं: " ifconfig | grepe inet " या " grepe css index.html "।

(पीएस: वर्तमान सत्र पर source ~/.bashrc को पुनः लोड करने के लिए source ~/.bashrc को भूलना न भूलें)


एक और गंदे तरीके:

grep -A80 -B80 --color FIND_THIS IN_FILE

मैंने किया

alias grepa='grep -A80 -B80 --color'

bashrc में।


ऐसा करने के कुछ तरीके यहां दिए गए हैं:

grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file

पूरी फ़ाइल देखते समय पैटर्न को हाइलाइट करने के लिए, h यह कर सकता है।

इसके अलावा यह विभिन्न पैटर्न के लिए विभिन्न रंगों का उपयोग करता है।

cat FILE | h 'PAT1' 'PAT2' ...

बेहतर पढ़ने के लिए आप h के आउटपुट को less -R भी पाइप कर सकते हैं।

प्रत्येक पैटर्न के लिए 1 रंग grep और उपयोग करने के लिए, cxpgrep एक अच्छा फिट हो सकता है।


मैं "लिनक्स सर्वर हैक्स", O'Reilly से आरसीजी का उपयोग करता हूं। यह आप जो चाहते हैं उसके लिए यह सही है और अलग-अलग रंगों के साथ प्रत्येक अभिव्यक्ति को हाइलाइट कर सकता है।

#!/usr/bin/perl -w
#
#       regexp coloured glasses - from Linux Server Hacks from O'Reilly
#
#       eg .rcg "fatal" "BOLD . YELLOW . ON_WHITE"  /var/adm/messages
#
use strict;
use Term::ANSIColor qw(:constants);

my %target = ( );

while (my $arg = shift) {
        my $clr = shift;

        if (($arg =~ /^-/) | !$clr) {
                print "Usage: rcg [regex] [color] [regex] [color] ...\n";
                exit(2);
        }

        #
        # Ugly, lazy, pathetic hack here. [Unquote]
        #
        $target{$arg} = eval($clr);

}

my $rst = RESET;

while(<>) {
        foreach my $x (keys(%target)) {
                s/($x)/$target{$x}$1$rst/g;
        }
        print
}

मैंने इसे अपने .bash_aliases में जोड़ा:

highlight() {
  grep --color -E "$1|\$"
}

यदि आप विभिन्न रंगों के साथ कई पैटर्न को हाइलाइट करना चाहते हैं तो this बैश स्क्रिप्ट को देखें।

मूल उपयोग:

echo warn error debug info 10 nil | colog

एक कुंजी दबाते समय आप पैटर्न और रंग बदल सकते हैं और फिर कुंजी दर्ज कर सकते हैं।


यहां एक ही पंक्ति के साथ कुछ है। संभावना है, आप वैसे भी कम उपयोग करेंगे, तो इसे आजमाएं:

less -p pattern file

यह पैटर्न को हाइलाइट करेगा और फ़ाइल में इसकी पहली घटना पर कूद जाएगा।






grep