MATCH 색상 입력을 grep하는 방법은 무엇입니까?

MATCH 색상 입력을 grep하는 방법은 무엇입니까?

터미널에 색상을 지정하는 명령의 출력이 있다고 가정해 보겠습니다. 노란색이 포함된 모든 행과 일치시키고 싶습니다. 예를 들어, grep에서 이 작업을 어떻게 수행할 수 있습니까?mycommand -itSomtimesPrintsLinesWithYellowColorCodes | grep -e "?????"

참고: 이것은 grep 출력에 색조를 지정하거나 색상을 추가하는 것이 아닙니다. 이것은 grep으로 들어가는 입력의 색상을 필터링/일치하는 방법에 관한 것입니다.

답변1

tput이를 사용하여 터미널에 대한 노란색 및 검정색 색상 코드를 생성해 보겠습니다 .

$ yel=$(tput setaf 3)
$ blk=$(tput setaf 0)

노란색 코드에 실제로 어떤 내용이 포함되어 있는지 살펴보겠습니다.

$ echo -n "$yel" | hexdump -C
00000000  1b 5b 33 33 6d                                    |.[33m|
00000005

이제 이를 사용하여 grep노란색 코드를 검색하고 해당 코드가 무엇이든 관계없이 노란색 코드의 시작 부분부터 다음 코드까지 일치하는 문자열을 인쇄할 수 있습니다.

$ echo "abc ${yel}Yellow${blk} def" | grep -Eo $'\x1b\[33m.[^\x1b]*\x1b\[....'
Yellow 

노란색의 색상 코드에는 정규 표현식의 활성 문자 [로 간주되는 문자가 포함되어 있습니다. grep따라서 리터럴을 일치시키려면 [이를 이스케이프 처리해야 합니다 grep. 이를 위해 bash를 사용하여 $'...'[` 이스케이프를 사용하여 색상 코드를 정의합니다.

우리는 두 가지 옵션을 사용했습니다 grep: -ETell grepusing (modern)확장 정규식. 이 옵션은 일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하도록 -o지시하며 , 각 해당 부분은 별도의 출력 줄에 표시됩니다.grep

터미널에 노란색을 생성하는 코드가 여러 개 있을 수 있습니다. 사용 중인 코드를 확인하고 해당 코드를 명령에 포함하려면 사용 중인 명령의 출력을 확인해야 합니다 grep.

관련 정보