전체 명령 출력을 표시하면서 콘솔 검색 출력을 강조 표시합니다.


19

예를 들어 사용하면 cat file.txt | grep --color=tty "pattern"검색 한 패턴이 강조 표시됩니다. 나는 명중 할 때마다 주위에 좀 더 컨텍스트를 원할 때, grep을 가지고 -A, -B그리고 -C매개 변수를.

그러나 전체 파일 (또는 모든 명령 출력)을 표시하고 특정 패턴을 강조하고 싶습니다. 이러한 강조 명령 또는 도구가 있습니까?


지금하고 싶은 것과 이미하고있는 것과 어떻게 다른가?
Benjamin Bannier

답변:


22

있었다 unix.stackexchange.com에 답 이 깔끔한 트릭을했다 :

grep -E --color 'pattern|$' file.txt

또는

grep --color 'pattern\|$' file.txt

각 줄의 패턴 또는 줄 끝과 일치합니다. 패턴 만 강조 표시됩니다.


+1 간단하고 zgrep, bzgrep 등에 쉽게 적용 할 수 있습니다.
Stefan Lasiewski

항상 색상을 입력하지 않는 방법이 있습니까? grep에 색상 옵션을 포함시키는 것이 매우 기본이라고 생각합니다. 왜 매번 명시 적으로 색상을 입력했는지 모르겠습니다. grepd 파일에 grep --color $ 1 $ 2라는 bash가 있지만 스크립트가 작동하지 않는다고 스크립트를 만들려고했습니다. 이 문제를 해결하기위한 단서가 있습니다
Srujan Kumar Gulla

1
@lordlupine : 추가 GREP_OPTIONS='--color'사용자에 ~/.bashrc(또는 포함하도록 설정을 수정 --color). 새 터미널을 시작하거나 현재 터미널의 명령 줄에서 해당 할당을 실행하여 적용해야합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

9

나는 ack을 좋아한다 .

ack --passthru somepattern filename

grep과 같지만 더 좋습니다. 기본적으로 강조 표시되며 --passthru옵션을 사용하면 일치하는 행 대신 전체 파일 (또는 표준 입력)이 표시됩니다.


1
예를 들어 from에서 출력을 ack로 파이프하려는 경우 옵션도 tail사용해야합니다 --filter. 예를 들면 :tail -f myLogFile | ack --filter --passthru pattern
sparrowt

5

또한 less(또는 이와 같은) 사용을 권장 하지만 더 실용적인 솔루션을 보여주고 싶습니다. 이 기능을 정의한 후에는

함수 highlight ()
{
    sed "s / $ 1 /`tput smso` &`tput rmso` / g" "$ {2 :-}"
}

이 방법으로 사용할 수 있습니다 :

command | highlight pattern
highlight pattern file.txt

참고 : 이 버전은, 대소 문자를 구분 만이 추가됨을 변경 i한 후 gsed식입니다.


1
tput값을 하드 코딩하는 대신 호출 합니다. 이런 식으로 echo -e다른 효과를 줄 수 있는를 사용하지 않아도됩니다.
Ignacio Vazquez-Abrams

당신은 절대적으로 맞습니다, 나는 운없이 그것을 검색했습니다. 감사.
cYrus

이 버전은 캡처 괄호를 필요로하지 않으며 prog | highlight "pattern"또는에 의해 실행될 수 있습니다 highlight "pattern" file.highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
추가 통지가있을 때까지 일시 중지되었습니다.

sed기술은 기본적으로 존재하지 않습니다. 대소 문자를 구분하기 위해 어떻게 변경해야합니까? 어쨌든, 나는 그것을 bash_functions include에 추가 할 것입니다. 대단히 감사합니다.
DerMike

@DerMike : 이제 대소 문자를 구분합니다.
cYrus

3

전달 -Cgrep충분히 높은 값은이 작업을 수행 할 것입니다.


지난번에 시도했을 때 다른 것을 얻었습니다. (각각의 문맥은 사이에 '-----'구분 기호와 일치합니다.) 이제 말했듯이 잘 작동합니다 :-) 감사합니다.
DerMike

컨텍스트가 충분하지 않으면 각 일치 항목을 구분합니다.
Ignacio Vazquez-Abrams

3

less 패턴을 강조하므로

less -p 'mypattern' file.txt

또는

ridiculously | long | pipe | less

그런 다음 /강조 표시 될 패턴을 검색합니다.

사이드 노트 :


set alias alias grep="grep --color=tty"와 같은 명령을 향상시키고 다음 과 같이 사용할 수 있습니다.

grep 'mypattern' file.txt;

1
GREP_OPTIONS를 사용하지 말고 alias를 대신 사용하십시오. 참조 : bugs.launchpad.net/ubuntu/+bug/67141
lesmana

Primum non norere. 제거되었습니다.
캐주얼 코더

GREP_OPTIONS는 여러 형태의 grep(zgrep, bzgrep, bzfgrep 등)에서 사용되므로 모든 형태의 grep이 일관되게 작동하려면 각 형태의 grep에 대한 별명을 설정해야합니다. 위의 @Casual의 새로운 답변은와 같은 것을 사용하지 않을 것입니다 bzgrep pattern /var/log/messages.?.gz. 이것은 색상 강조가 매우 도움이되는 예입니다.
Stefan Lasiewski

1

훌륭한 슈퍼 캣 도구가 있습니다. 콘솔 출력을 채색하고 입력에서 "강조 표시된"HTML을 생성 할 수 있습니다.


감사합니다. 그러나 현재로서는 작동하지 않는 것 같습니다.
DerMike

1
/etc/supercat색상 규칙을 설정하는 구성 파일 ( Ubuntu에 있음)을 살펴보십시오. 기본적으로 색상 / 정규 쌍 (일부 추가 규칙 포함)입니다. 맨 페이지도 짧고 좋습니다.
Ivan Tarasov

나는 발견 spcrc에 정력 구문 파일을 vim.org/scripts/script.php?script_id=2676
DerMike
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.