[bash] 채색 된 grep-강조 표시된 일치 항목으로 전체 파일보기

grep--color=always깃발이 엄청나게 유용하다는 것을 알았습니다 . 그러나 grep은 문맥 행을 요청하지 않는 한 일치하는 행만 인쇄합니다. 인쇄하는 각 줄에 일치하는 항목이 있으면 강조 표시에 가능한 한 많은 기능이 추가되지 않습니다.

cat파일 을 정말로보고 싶습니다 . 패턴 일치가 강조 표시된 전체 파일을 봅니다.

일치하는지 여부에 관계없이 grep에게 읽은 모든 행을 인쇄하도록 지시 할 수있는 방법이 있습니까? 파일의 모든 줄에서 grep을 실행하는 스크립트를 작성할 수 있다는 것을 알고 있지만 이것이 표준으로 가능했는지 궁금합니다 grep.



답변

몇 가지 방법이 있습니다.

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


답변

같은 줄을 따라 뭔가가 있습니다. 어쨌든 덜 사용하게 될 것이므로 다음을 시도하십시오.

less -p pattern file

패턴을 강조 표시하고 파일에서 처음 나타나는 패턴으로 이동합니다.


답변

프로그래머를위한 파워 검색 도구 인 grep보다 ack 을 추천하고 싶습니다 .

$ ack --color --passthru --pager = "$ {PAGER : -less -R}"패턴 파일
$ ack --color --passthru 패턴 파일 | 적은 -R
$ 내보내기 ACK_PAGER_COLOR = "$ {PAGER : -less -R}"
$ ack --passthru 패턴 파일

디렉토리의 재귀 적 검색 (및 훨씬 더 똑똑한 )으로 기본 설정되고 grep -rPOSIXish 대신 전체 Perl 정규 표현식을 지원하며 regex(3)많은 파일을 검색 할 때 컨텍스트 표시가 훨씬 우수 하기 때문에 나는 그것을 좋아 합니다.


답변

https://github.com/kepkin/dev-shell-essentialshighlight 에서 내 스크립트를 사용할 수 있습니다

그건 이상 grep당신은 각 경기를 강조 할 수 있기 때문에 자신의 색을 .

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

Github 프로젝트의 스크린 샷


답변

별명을 작성할 수도 있습니다. 이 함수를 .bashrc (또는 osx의 .bash_profile)에 추가하십시오

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

이제 ” ifconfig | grepe inet“또는 ” grepe css index.html” 와 같은 별칭을 사용할 수 있습니다 .

(PS : source ~/.bashrc현재 세션에서 bashrc를 다시로드 하는 것을 잊지 마십시오 )


답변

colout프로그램 사용 : http://nojhan.github.io/colout/

텍스트 스트림에 색상 하이라이트를 추가하도록 설계되었습니다. 정규 표현식과 색상 (예 : “빨간색”)이 있으면 일치 항목이 강조 표시된 텍스트 스트림을 재생성합니다. 예 :

# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile

여러 호출을 연결하여 여러 가지 다른 색상 강조 표시를 추가 할 수 있습니다.

tail -f /var/log/nginx/access.log | \
    colout ' 5\d\d ' red | \
    colout ' 4\d\d ' yellow | \
    colout ' 3\d\d ' cyan | \
    colout ' 2\d\d ' green

또는 N 그룹 (정규식의 괄호로 묶은 부분)이있는 정규식을 사용하고 쉼표로 구분 된 N 색상 목록을 사용하여 동일한 작업을 수행 할 수 있습니다.

vagrant status | \
    colout \
        '\''(^.+  running)|(^.+suspended)|(^.+not running)'\'' \
        green,yellow,red


답변

O’Reilly의 “Linux Server Hacks”에서 rcg를 사용합니다. 원하는 것에 완벽하며 각기 다른 색상으로 여러 표현을 강조 할 수 있습니다.

#!/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
}