20. Perl 标准输出-终端高亮显示关键字

    xiaoxiao2022-07-04  212

    通常脚本都是运行在Linux 终端的, 脚本输出也都是无格式的纯文本信息, 对于perl 的标准输出也是如此。 但是, 有时我们会想突出一下输出内容,希望能高亮显示一些文本内容, 或对部分文本加粗。Perl 对此提供了很号的支持. Perl 内置了ANSIColor 模块儿, 可以对终端输出的文本进行高亮显示, 但是仅限于linux 终端.

    1. Perl 语言支持颜色输出

    颜色输出可以用于print 和 printf 语句 #!/usr/bin/perl #Desc 测试perl 的颜色输出 #Auth zongf #Date 2019-05-20 use warnings; #引入颜色模块儿 use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET = 1; printf "\n\n perl 支持的颜色类型 \n\n"; printf BOLD "BOLD\n"; printf CLEAR "CLEAR\n"; printf DARK "DARK\n"; printf UNDERLINE "UNDERLINE\n"; printf UNDERSCORE "UNDERSCOPRE\n"; printf BLINK "BLINK\n"; printf REVERSE "REVERSE\n"; printf CONCEALED "CONCELED\n"; printf BLACK "BLACK\n"; printf RED "RED\n"; printf GREEN "GREEN\n"; printf YELLOW "YELLOW\n"; printf BLUE "BLUE\n"; printf MAGENTA "MAGENTA\n"; printf CYAN "CYAN\n"; printf WHITE "WHITE\n"; printf ON_BLACK "ON_BLACK\n"; printf ON_RED "ON_RED\n"; printf ON_GREEN "ON_GREEN\n"; printf ON_YELLOW "ON_YELLOW\n"; printf ON_BLUE "ON_BLUE\n"; printf ON_MAGENTA "ON_MAGENTA\n"; printf ON_CYAN "ON_CYAN\n"; printf ON_WHITE "ON_WHITE\n";

    2 最佳实践

    在笔者进行perl 脚本开发时,通常会将一个字符串中的某个关键字进行高亮显示,为了提高代码的重用性,笔者抽象出了一个模块儿.

    2.1 封装成模块儿

    模块儿名称: sout.pm模块儿目录: /usr/share/perl/mylib package sout; #Desc 自定义输出工具 #Auth zongf #Date 2019-05-20 #打印颜色必须引入的模块和设置 use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET = 1; #Desc 输出有颜色的字符串 #Args 接收至少两个参数以上,第一个参数为要格式化的字符串,之后的参数为要使用颜色的字符串 sub line{ die "print_color 方法需要至少两个参数" if @_ <2; #获取要格式化颜色的字符串 my $line = shift @_; #获取要高亮的字符串数组 @patterns = @_; #获取要高亮显示的字符串数组,拼接正则模式 my $spectors = (shift @_) . '+'; foreach(@_){ $spectors .= "|$_+"; } #按正则模式进行分组 my @arrays = split(/($spectors)/, $line); #输出结果 for my $item(@arrays){ #直接使用@patterns 数组反向匹配,数组内插时,每个字符串直接会有空格 if("@patterns" =~ $item){ print BOLD RED $item; } else { print $item; } } print "\n"; } ############################## END ############################## 1;

    2.2 使用方式

    #!/usr/bin/perl #Desc 测试颜色输出模块儿 #Auth zongf #Date 2019-05-20 # 添加模块儿搜索路径 use lib "/usr/share/perl/mylib"; # 引入sout 模块儿 use sout; # 使用 sout::line("java linux javascript hello", "hell", "java");
    最新回复(0)