grep의 조건부 색상 지정

grep의 조건부 색상 지정

간단한 스크립트가 있습니다 bash. 내 스크립트의 한 줄은 "패턴"과 일치하는 색상을 찾습니다.

grep -i --color=always -- "$1"

줄이 주석이 아닌 경우에만 색상이 일치하도록 수정해야 합니다(즉, 주석으로 시작하지 않는 경우 #). 즉, 나는 여전히 grep이 주석 행과 일치하기를 원하지만 색상을 지정하지는 않기를 원합니다.

다음과 같은 텍스트 파일이 있다고 가정해 보겠습니다(줄 번호가 추가됨).

1 aaa PATTERN
2 bbb ccc PATTERN ddd
3 # eee PATTERN
4 fff ggg

라인 1, 2, 3을 일치시키려면 grep 표현식이 필요하지만 주석 처리되지 않은 라인(1 및 2)에만 색상을 지정합니다.

답변1

GNU grep옵션과 함께 사용 -P:

$ grep PATTERN file | grep -P '^[^#]*\KPATTERN|^'
aaa PATTERN
bbb ccc PATTERN ddd
# eee PATTERN

\KPATTERN일치하는 문자열에서 왼쪽의 모든 항목이 제외됩니다 . 이 솔루션에서는 grep별칭이 다음과 같다고 가정합니다.grep --color=auto

답변2

grep이런 식으로 조건부 색상 지정을 수행하는 것은 불가능합니다 . 일치하는 "패턴"만 강조 표시할 수 있습니다.

답변3

약간의 트릭: grep -E 'PATTERN' <filename> | grep --color -E "^[^#]*|$" -

다음을 사용할 수 있습니다. 먼저 grepPATTERN과 라인을 일치시킨 다음 grep"#"으로 시작하지 않는 두 번째 색상 라인을 일치시킵니다.

grep --color조건부 채색은 불가능하다고 생각합니다 .

관련 정보