grep : 2 개의 키워드를 색칠하는 방법?


12

1 명령을 사용하여 2 개의 키워드를 grep하는 방법을 알고 있지만 출력 중 하나만 채색 할 수 있습니다. 내 명령은 다음과 같습니다.

grep 'keyword1' file.log | grep 'keyword2'

keyword2강조 표시됩니다. keyword1동시에 강조 표시하려면 어떻게 해야합니까?

답변:


15

grep명령은 --color=always옵션을 허용 하므로 사용할 수 있습니다

grep 'keyword1' file.log --color=always | grep 'keyword2'

gertvdijk가 지적한 것처럼 이 명령은 비효율적 일 수 있지만 keyword1과 keyword2를 모두 포함하는 모든 행을 찾습니다. 다른 색상으로 강조 표시하려면

grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'

키워드 2가 파란색으로 강조 표시됩니다. 이 mt부분은 grepCSI 코드를 사용하여 일치하는 텍스트를 강조 표시 하고 01;34"일반 배경에서 굵은 파란색 전경"을 의미합니다.


1
사용 사례에 대한 자세한 설명 및 사용자 정의 옵션을 보려면 +1!
gertvdijk

재미있게, grep -R --color = always keyword1로 시도해보십시오. | grep keyword2 // 첫 번째 키워드 만 강조 표시됩니다. 재귀 검색을 수행하기 위해 어떻게 대답을 조정할 수 있습니까?
TenLeftFingers

1
이상하다, grep -R --color=always keyword1 . | grep keyword2작동한다. 출력을 다시 리디렉션합니까 (예 : 두 번째 grep로 파이프 로 연결 less -R)? 그렇다면 --color=always두 번째에도 추가해야합니다 .
Daniel H

좋은 대답입니다! 두 가지를 모두 강조하려면 바로 다음에 --color=auto초가 필요합니다 . grep'keyword2'
Luis

@Luis 그래, Grep이 최소한 기본적으로 무색으로 설정되어있는 것이 맞다. (구성 시간 옵션 일 수도 있지만? 2013 년에 기계없이 작업했을 때 재정의했다고 생각하지 않습니다 ...). 나는 --color=always당신이 그것을 less또는 다른 것으로 파이프하고 싶을 수도 있기 때문에 대답에 추가 했습니다 .
Daniel H

3

다음 grep과 같은 다른 인스턴스로 파이프하는 대신 실제 정규 표현식을 사용해보십시오 .

grep -E "\<foo\>.*\<bar\>" file

불행히도 키워드가이 순서로만 일치하는 일치하는 줄로 제한됩니다. 어쨌든, grep귀하의 질문에 사용하는 것은 다소 비효율적이므로 피해야합니다. @DanielH대답은 아마도 당신의 경우에 훨씬 더 간단합니다.

키워드와 '또는'일치하는 키워드를 정기적으로 사용합니다.

grep -E "(foo|bar)" file

1
OP는 두 키워드를 모두 포함하는 줄만 원한다고 생각합니다 (주어진 명령은 하나를 포함하는 모든 줄을 제공합니다).
Daniel H

@DanielH 지적 해 주셔서 감사합니다. 내 답변을 업데이트했습니다.
gertvdijk

foo가 bar 앞에 오면 여전히 작동하지 않습니까? 보다 나은 방법이 foo.*bar|bar.*foo있는지 또는이 경우 (키워드의 표준 순서를 가진 로그 파일로 보이는 경우)에도 필요한지 모르겠습니다 . 나는 당신을 업데이트하기 전에 내 대답을 추가했지만 체인이 grep실제로 필요한 상황이 있거나 (또는 ​​다른 시간에 컬러 출력을 터미널에 보내서는 안되는 경우) 계속 사용하겠습니다 grep | less -R.
Daniel H
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.