
Bash에서 명령을 실행하고 특정 패턴과 일치하는 출력 행만 표시하려면 다음 grep
과 같이 파이프할 수 있습니다.
파일 테스트 파일
hello
there
my
friends
명령
$ cat testfile | grep 'hello'
hello #this will be highlightd
그러면 검색 일치 항목이 강조 표시되고 일치하는 항목 전체가 표시됩니다. 해당 줄 앞과 뒤에 줄을 표시하려면 -A
and 를 사용할 수 있습니다 . -B
내 질문은 명령을 실행하고 모든 출력을 정상적으로 표시할 수 있지만 grep처럼 검색 일치 항목을 강조 표시하는 것이 가능합니까? 그래서 내 출력은
hello #highlighted
there
my
friends
답변1
Color GREP를 사용하여 일치하는 패턴만 강조 표시하고 출력을 변경하지 않으려면 다음을 수행하십시오.
grep --color=always -e "^" -e "hello" testfile
첫 번째 패턴은 모든 행과 일치합니다(모든 행이 인쇄됨). 두 번째 패턴(및 후속 패턴)은 일치하는 텍스트를 색상으로 강조 표시합니다.
첫 번째 패턴은 모든 줄과 일치하지만 인쇄 가능한 문자에서는 일치하지 않기 때문에 색상 강조를 추가하지 않으므로 강조 표시된 텍스트의 가독성과 경쟁/간섭하지 않습니다.
답변2
-z
GNU 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>'
.