tail和grep文件以及IP地址的唯一颜色

Jac*_*son 3 linux bash grep gnu tail

我坚持尝试着色tail -f输出,以便每个IP地址的IP地址颜色是唯一的.我通过搜索找不到任何东西.

这里有一些代码可以单独为当前的IP地址着色,但每个IP的颜色都是相同的颜色.

tail -f /var/www/domain.com/logs/global.log | egrep --color=auto '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'

我希望每个IP地址都有一个独特的颜色.因此,您可以区分用户.

我试过了:

tail -f /var/www/domain.com/logs/global.log | GREP_COLOR='01;36' egrep --color -E '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}|$'

我正在尝试找出一种基于IP是什么来定义颜色的方法,但我不确定如何继续.

但迄今为止帮助不大.我在正确的路线上吗?干杯


结果

感谢下面的帮助,这是一个有效的编译答案

# Color ip address only
tail -f /var/www/file | perl -pe 's/\d{1,3}\.\d{1,3}.(\d{1,3})\.\d{1,3}/\033[38;5;\1\2\3m$&\033[39m/g'
Run Code Online (Sandbox Code Playgroud)

我最常用的新东西

# Color entire line
tail -f /var/file.log | perl -pe 's/^.*(\d{1,3})\.(\d{1,3}).(\d{1,3})\.(\d{1,3}).*$/\033[38;5;\2\2\3m$&\033[39m/g'
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 5

这是perl中的一种可能性: tail -f YOURFILE| perl -pe 's/\d{1,3}\.\d{1,3}.(\d{1,3})\.\d{1,3}/\033[38;5;\1\2\3m$&\033[39m/g'

它使用基于其第三个八位字节的ANSI颜色序列替换每个寻找子字符串的子字符串.

它在re2g中的工作方式相同:tail -f YOURFILE| re2g -gp '\d{1,3}\.\d{1,3}.(\d{1,3})\.\d{1,3}' -s $'\033[38;5;\\1\\2\\3m\\0\033[39m'

在perl中,您可以通过以下方式获得更多颜色选择:tail -f YOURFILE| perl -pe 's/(\d{1,3})\.(\d{1,3}).(\d{1,3})\.(\d{1,3})/"\033[38;5;".(16+($1+$2+$3+$4)%214)."m$&\033[39m"/ge'.此版本保证颜色落入漂亮的可见范围,并且还将颜色基于所有四个八位字节.

另见:https://en.wikipedia.org/wiki/ANSI_escape_code#Colors