간단한 스크립트가 있습니다 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
\K
PATTERN
일치하는 문자열에서 왼쪽의 모든 항목이 제외됩니다 . 이 솔루션에서는 grep
별칭이 다음과 같다고 가정합니다.grep --color=auto
답변2
grep
이런 식으로 조건부 색상 지정을 수행하는 것은 불가능합니다 . 일치하는 "패턴"만 강조 표시할 수 있습니다.
답변3
약간의 트릭:
grep -E 'PATTERN' <filename> | grep --color -E "^[^#]*|$" -
다음을 사용할 수 있습니다. 먼저 grep
PATTERN과 라인을 일치시킨 다음 grep
"#"으로 시작하지 않는 두 번째 색상 라인을 일치시킵니다.
grep --color
조건부 채색은 불가능하다고 생각합니다 .