我想用彩色关键字打印日志。以前我用过:
cd ~/Code/Docker/somerepo && docker-compose logs -f my_service \
| grep -v "Successfully connected" \
| grep -v "this operation breaks ==" \
| sed "s/at com\.example\.product/at \x1b[32mcom\.example\.product\x1b[0m/g" \
| sed "s/caused by/\x1b[31mcaused by\x1b[0m/g"
作为一个函数,它可以工作。
现在我想提取颜色定义并将其放入名为get_color
and的函数中print_in_color
:
get_color() {
number=
case "$1" in
RED)
number='31'
;;
GREEN)
number='32'
;;
YELLOW)
number='33'
;;
BLUE)
number='34'
;;
PURPLE)
number='35'
;;
*)
number='38'
;;
esac
echo '\x1b['$number'm'
}
# $1 string, $2 color(RED, YELLOW, BLUE, GREEN, PURPLE)
print_in_color() {
while read data;
do
color=$(get_color $2)
nocolor='\x1b[0m'
echo $1 | sed "s/$1/${color}$1${nocolor}/g"
done;
}
并像使用它一样
log_color() {
cd ~/Code/Docker/somerepo && docker-compose logs -f my_service \
| grep -v "Successfully connected" \
| grep -v "this operation breaks ==" \
| print_in_color 'com\.example\.product' BLUE \
| print_in_color 'caused by' RED
}
但现在它只打印caused by
红色。
我如何定义一个函数来返回一个管道以管道到另一个函数?
只需简化您的
print_in_color
功能:您不需要循环输入数据。该
sed
命令接受管道输入的数据并将结果写入管道输出,以便您可以链接许多print_in_color
调用更新
无
get_color
功能: