[unix] 꼬리에 다른 소스를 색칠

나는 다른 로그를보고있다.

tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log

각 로그의 출력을 다르게 채색하려면 어떻게해야합니까?



답변

grep채색에 GNU 사용 하기 :

color() { GREP_COLOR=$1 grep --color '.*'; }

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)

처음 2 개는 백그라운드에서 시작됩니다. 즉, Ctrl-C(비동기 작업의 경우 SIGINT를 명시 적으로 무시 합니다)를 누르면 죽이지 않습니다 .

이를 방지하기 위해 대신 다음을 수행 할 수 있습니다.

color() { GREP_COLOR=$1 grep --line-buffered --color=always '.*'; }

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33) | cat

이렇게 하면 SIGINT Ctrl-C의 마지막 tail+grepcat다이와 다른 두 grep + tail은 다음에 무언가를 쓸 때 SIGPIPE로 죽습니다.

또는 SIGINT 핸들러를 복원하십시오 (모든 쉘에서 작동하지는 않음).

color() { GREP_COLOR=$1 grep --color '.*'; }

((trap - INT; tail -qf /var/log/syslog | color 31) &
(trap - INT; tail -qf /var/log/fail2ban.log | color 32) &
tail -qf /var/log/nginx/error.log | color 33)

color함수 에서 할 수도 있습니다. 에는 적용되지 tail않지만 tail다음에 grep죽으면 SIGPIPE로 사망합니다.

color() (trap - INT; GREP_COLOR=$1 exec grep --color '.*')

(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)

또는 전체 꼬리 + grep을 기능으로 만드십시오.

tailc() (trap - INT; export GREP_COLOR="$1"; shift; tail -qf -- "$@" |
   grep --color '.*')
tailc 31 /var/log/syslog &
tailc 32 /var/log/syslog &
tailc 33 /var/log/nginx/error.log

또는 모든 것 :

tailc() (
  while [ "$#" -ge 2 ]; do
    (trap - INT; tail -f -- "$2" | GREP_COLOR=$1 grep --color '.*') &
    shift 2
  done
  wait
)

tailc 31 /var/log/syslog 32 /var/log/syslog 33 /var/log/nginx/error.log


답변

이와 같은 Someting이 저에게 효과적이었습니다.

(tail -f /var/log/syslog | awk -W interactive '{printf "\033[1;31m%s\033[0m\n", $0}' & \
tail -f /var/log/auth.log | awk -W interactive '{printf "\033[1;32m%s\033[0m\n", $0}' & \
tail -f /var/log/Xorg.0.log | awk -W interactive '{printf "\033[1;34m%s\033[0m\n", $0}')

설명:

  • tail -f file: 파일이 커질 때 데이터 추가
  • awk -W interactive: awk대화식 모드로 설정
  • '{printf "\033[1;31m%s\033[0m\n", $0}' 터미널에 컬러화 된 출력을 인쇄합니다.
  • \033[1;31m 빨간색을 의미
  • \033[1;32m 녹색을 의미
  • \033[1;34m 파란색을 의미

답변