터미널에 색상을 지정하는 명령의 출력이 있다고 가정해 보겠습니다. 노란색이 포함된 모든 행과 일치시키고 싶습니다. 예를 들어, 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
: -E
Tell grep
using (modern)확장 정규식. 이 옵션은 일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하도록 -o
지시하며 , 각 해당 부분은 별도의 출력 줄에 표시됩니다.grep
터미널에 노란색을 생성하는 코드가 여러 개 있을 수 있습니다. 사용 중인 코드를 확인하고 해당 코드를 명령에 포함하려면 사용 중인 명령의 출력을 확인해야 합니다 grep
.