서로 다른 색상을 사용하여 동일한 출력에서 ​​서로 다른 텍스트 블록에 색상을 지정합니다.

서로 다른 색상을 사용하여 동일한 출력에서 ​​서로 다른 텍스트 블록에 색상을 지정합니다.

입력( ) 또는 출력( ) >>>이라는 서명된 방향으로 I/O 데이터를 출력하는 스크립트가 있습니다 .<<<<<<>>>

<timestamp> >>>>>>>>>>
loads
of
output

<timestamp> <<<<<<<<<<
loads
of
input

이 출력을 가져와서 입력을 한 색상으로 색칠하고 출력을 다른 색상으로 색칠하고 싶습니다. git diff파일 버전의 색상 차이와 비슷합니다.

최소한의 입력(바람직하게는 한 줄)으로 이 작업을 수행하려면 어떻게 해야 합니까?

답변1

아마도 다음과 같은 것이 awk당신에게 도움이 될 것입니다:

awk 'BEGIN{ce="\033[0m"}
     />>>/{cs="\033[1;31m"}
     /<<</{cs="\033[1;32m"}
     {print cs$0ce}' your.data

그건:

BEGIN {
    ce = "\033[0m"
}
/>>>/ {
    cs = "\033[1;31m"
}
/<<</ {
    cs = "\033[1;32m"
}
{
    print cs $0 ce
}

답변2

전체 쉘, 터미널 독립적, 의미론적 솔루션을 위해, tput인식하는 모든 터미널에 대한 올바른 색상 변경 순서를 제공하기 위해 terminfo 데이터베이스를 사용하여 색상 처리를 활용하는 또 다른 방법이 있습니다.

black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
off=$(tput sgr0)

echo ${red}some red text${blue} some blue text${green} and green${off} and back to normal.

관련 정보