모든 출력을 표시하지만 검색 일치 항목은 강조 표시합니다.

모든 출력을 표시하지만 검색 일치 항목은 강조 표시합니다.

Bash에서 명령을 실행하고 특정 패턴과 일치하는 출력 행만 표시하려면 다음 grep과 같이 파이프할 수 있습니다.

파일 테스트 파일

hello
there
my
friends

명령

$ cat testfile | grep 'hello'
hello #this will be highlightd

그러면 검색 일치 항목이 강조 표시되고 일치하는 항목 전체가 표시됩니다. 해당 줄 앞과 뒤에 줄을 표시하려면 -Aand 를 사용할 수 있습니다 . -B내 질문은 명령을 실행하고 모든 출력을 정상적으로 표시할 수 있지만 grep처럼 검색 일치 항목을 강조 표시하는 것이 가능합니까? 그래서 내 출력은

hello #highlighted
there
my
friends

답변1

Color GREP를 사용하여 일치하는 패턴만 강조 표시하고 출력을 변경하지 않으려면 다음을 수행하십시오.

grep --color=always -e "^" -e "hello" testfile

첫 번째 패턴은 모든 행과 일치합니다(모든 행이 인쇄됨). 두 번째 패턴(및 후속 패턴)은 일치하는 텍스트를 색상으로 강조 표시합니다.

첫 번째 패턴은 모든 줄과 일치하지만 인쇄 가능한 문자에서는 일치하지 않기 때문에 색상 강조를 추가하지 않으므로 강조 표시된 텍스트의 가독성과 경쟁/간섭하지 않습니다.

답변2

-zGNU grep 명령에 옵션을 추가하십시오 :

cat testfile | grep --color=always -z 'hello'

또는 더 짧음

grep --color=always -z 'hello' testfile

답변3

이것은 FreeBSD의 grep뿐만 아니라 GNU grep에서도 작동합니다:

grep --color=always 'hello\|$'

이는 "hello" 텍스트 또는 ( \|) 각 줄 끝에 있는 인쇄할 수 없는 null 문자열( $)과 일치합니다. 이것이 바로 각 줄이 인쇄되지만 "hello"만 강조표시되는 이유입니다.

--color=auto쉘에서 이미 구성했을 가능성이 있습니다 . 그렇다면 다음을 지정할 필요가 없을 것입니다 --color=always.

grep 'hello\|$'

egrep(확장 정규 표현식 사용)을 사용하여 더 간단한 버전을 사용할 수도 있습니다 . |여기서 "or" 표현식은 이스케이프할 필요가 없습니다.

egrep 'hello|$'

StackOverflow에 대한 비슷한 질문도 참조하세요.Colorized grep - 강조 표시된 일치 항목이 있는 전체 파일 보기

답변4

ripgrep다음은 현대적이고 사용하기 쉽고(IMO) 훨씬 빠른 교체를 사용하는 솔루션입니다 grep.

cat my-file | rg --passthru '<REGEX>'

"하이라이터 색상"을 쉽게 사용자 정의할 수도 있습니다.

# dark red foreground with light yellow background:
cat my-file | rg --passthru --colors match:fg:124 --colors match:bg:229 '<REGEX>'

보다 man rg(온라인 버전).


일상적인 사용을 위해 쉘 별칭을 만들었습니다.

# in .bashrc
alias hl='rg --passthru --colors match:fg:124 --colors match:bg:229'

이제는 처럼 간단합니다 cat my-file | hl '<REGEX>'.

관련 정보