차이점을 강조하기 위해 "watch -d"와 유사한 Linux 명령의 색상 출력이 있습니까?

차이점을 강조하기 위해 "watch -d"와 유사한 Linux 명령의 색상 출력이 있습니까?

저는 쉘 스크립팅 등의 시작 단계에 있으며 watch 명령의 -d 옵션과 유사하게 명령의 반복 출력을 색상화하는 올바른 방법을 찾는 데 몇 가지 어려움을 겪고 있습니다.

lsof 및 기타 명령에 대한 변경 사항을 보고 싶습니다. 즉, 변경된/새 줄만 빨간색으로 강조 표시되기를 원합니다(흰색 배경으로 강조 표시하고 다음 줄을 모두 강조 표시하는 대신). diff나 다른 명령을 사용하여 이를 수행하는 우아한 방법이 있습니까?

예: 빨간색 선은 SSH를 통한 새 연결을 표시합니다.

여기에 이미지 설명을 입력하세요.

(여기서 GREP을 사용하여 ESTABLISHED를 찾을 수 있지만, 내가 보고 싶은 모든 명령이 검색할 키워드를 제공하는 것은 아닙니다. 따라서 출력에서 ​​새/변경된 줄을 찾아야 합니다.)

답변1

마침내 나는 그것을 할 수 있는 방법을 찾았습니다. 성능 및 대기 시간 때문에 파일 작업(tmpfs 등)을 피하고 싶습니다. 비결은 명령의 출력이 무엇인지 dwdiff또는 두 가지 인수로 알려주는 것입니다.wdiff그리고예전에는동일한 반복 내에서. 프로세스 대체는 나의 도우미입니다.

while true; do p1=$p2; p2=$(clear; iotop -ob -n1); 
    dwdiff -y "\010" -1 -c <(echo "$p1") <(echo "$p2"); sleep 1; done

-y "\010"열이 잘 정렬되도록 하려면 변경된 단어 앞의 공백을 제거하세요 . $p1절차 $p2적 대체를 보존하는 데 사용되는 범위 <(...). 교체 시 출력을 직접 제공하는 것은 나에게 적합하지 않습니다. 여기서 이런 팁을 얻었습니다이것우편 엽서.

어쩌면 더 간단한 해결책이 있을 수도 있지만 결국 나는 너무 복잡합니다. 마음껏 포스팅해주세요!

답변2

ANSI이스케이프 시퀀스를 사용할 수 있습니다 . 원하는 색상과 스타일을 설정하기 위해 \033[#m#이 세미콜론으로 구분된 유효한 숫자 집합이 될 수 있는 구문이 있습니다 .

다음과 같은 색상을 정의할 수 있습니다.

CLEAR="\033[0m"
GREEN="\033[0;32m"
BLUE="\033[0;34m"
PURPLE="\033[0;35m"
RED="\033[0;31m"
YELLOW="\033[1;33m"

그리고 그것들을 다음과 같이 사용하십시오echo -e "${GREEN}Updated${CLEAR}"

더 많은 참고 자료를 보려면 여기를 확인하세요.

관련 정보