perl脚本在linux里,只显示带颜色的命令

perl脚本在linux里,只显示带颜色的命令,第1张

对于Linux管理员来说,grep是日常最常用的命令,可以把匹配的字符输出,同样可以输出颜色

# grep --color 'test' /var/log/maillog

无聊练功:用perl 实现grep --color

# vi colorgrep

#!/usr/bin/perl

use Term::ANSIColor

my $test

if (@ARGV != 2){

die "Please use (colorgrep 'some key word' filename)\n"

}

$test = shift @ARGV

while(<>){

if(/$test/i){

print "$`"

print color "bold red"

print "$&"

print color 'reset'

print "$'"

}

}

这里调用了Term::ANSIColor 函数 color 有以下的参数:

clear, reset, dark, bold, underline, underscore, blink, reverse, concealed, black, red, green, yellow, blue, magenta, cyan, white, on_black, on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, and on_white

还有以下的简化使用方法

2) use Term::ANSIColor qw(:constants)

如果使用这种方法,可以直接把颜色属性放在要输出的问题前面,从而简化输出步骤。这些颜色属性有:

CLEAR, RESET, BOLD, DARK, UNDERLINE, UNDERSCORE, BLINK, REVERSE, CONCEALED, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, ON_BLACK, ON_RED, ON_GREEN, ON_YELLOW, ON_BLUE, ON_MAGENTA, ON_CYAN, and ON_WHITE

等。

例如:

print BOLD BLUE ON_WHITE “Text”, RESET, “\n”

如果你打印完之后想清除掉字符串的格式,一定要记得在最后加上一个RESET的属性值。

例如:

use Term::ANSIColor qw(:constants)

print BOLD, BLUE, “This text is in bold blue.\n”, RESET

3) $Term::ANSIColor::AUTORESET = 1

对于2)的方法,如果你不想在每条打印语句后面加上RESET的话,你可以直接把$Term::ANSIColor::AUTORESET的值设为true。这样每次打印完字符,只要你的属性值之间没有逗号,系统将自动帮你清除掉颜色属性。

看一个完整的例子:

use Term::ANSIColor qw(:constants)

$Term::ANSIColor::AUTORESET = 1

print BOLD BLUE “This text is in bold blue.\n”

print “This text is normal.\n”

这三种方法,使用起来各有千秋,可根据要打印的复杂程度选用。

在linux中,我们在编辑时需要对文档编辑或者一些信息的显示加上颜色,增强阅读的效果 格式: echo -e "\033[字体颜色字背景颜色m字符串\033[0m"要显示什么颜色,优先是先判断位置,按语法上来说,应该是先字体色,然后是背景色,但是字体色的地方数值为43,所以判断为背景的颜色,而在后面的31本应该是背景色,结果数值31位字体的颜色,所以显示的效果是字体的颜色为红色,而不是背景红色,假设这个31是数值41,则表示背景的为红色,整体的效果就是红色背景,字体处没有颜色,为默认的白色,且效果是闪烁。 其中设置颜色的格式为:\033[ m …… \033[0m,其中ascii code是对颜色调用的始末.也可以表示为\e[FBm…….\e[0m 字背景颜色范围: 40--49                  字颜色: 30--39 例如显示红色,其中红色^[[31mred^[[0m其中^[是在插入编辑模式下按键进去额ctr+v+[这三个按键输入的。 假设写在文档tt1写入对应的语句来查看,通过cat  tt1验证效果^[[31mred^[[0m :表示对应的字是红色字体,没有底色,如下截图^[[31mred^[[44m:表示红色字体,底色为紫红色。假设写在文档tt1,后面cat tt1.这个屏幕底色都是蓝色,字都是红色如下截图^[[3144mred^[[0m:表示红色字体,字和屏幕的底色为蓝色,背景没有底色,和^[[31mred^[[44m效果一样。如下截图^[[3144mred^[[44m:表示红色字体,底色都是蓝色在命令行里输入命令:echo -e '\e[43314mmagedu\e[0m',得到如下的效果PS1是Linux终端用户的一个环境变量,用来说明命令行提示符的设置。在终端输入命令:echo $PS1,就会输出PS1的定义:默认的PS1变量值为 : PS1="[\u@\h \W]$" PS1的定义中个常用的参数的含义如下:给PS1赋值如下: PS1="[\[\e[3140m\]\u\[\e[3740m\]@\[\e[3440m\]\h\[\e[3740m\] \W]\\$\[\e[0m"这里需要注意,颜色的结束调用符号,要放在最后面,否则当使用命令history查看历史命令时,会出现各种异常的显示 正确的结果得到的结果如下图 当把结束符调整到$前面,如PS1="[\[\e[3140m\]\u\[\e[3740m\]@\[\e[3440m\]\h\[\e[3740m\] \W]\[\e[0m\\$",使用history查找的时候出现了如下的异常显示注意,这里赋值的时候要用单引号才能得到要的效果,只是单纯改变颜色,其他值不改变,如果赋值用双引号,如下 错误写法:PS1="[\[\e[3140m\]\u\[\e[3740m\]@\[\e[3440m\]\h\[\e[3740m\]\W]\[\e[0m\$"得到的效果如下:如果是root时,提示符为:# ,普通用户则为:$,但是双引号后root的提示符为$,是不对的 解决办法:如果用双引号,需要再\$前再加一个\,语句如下 PS1="[\[\e[3140m\]\u\[\e[3740m\]@\[\e[3440m\]\h\[\e[3740m\] \W]\\$\[\e[0m" 赋值为PS1='\[\e[43m\][\[\e[31m\]\u@\[\e[34m\]\h \W]\$\e[0m'效果如下截图这个例子,我们可以明显看出,\e[颜色值m这个是说明接下来的颜色从这里开始是什么颜色,\e[0m说明的是颜色的结束位置, 这里需要注意的是,如果没有通过\[   \]对每一个颜色进行界定,使用过程,如上翻历史页,就会出现显示异常。 将设置好的PS1变量写到家目录下的.bashrc 里面,这样后面开启的终端都有效。 $ vim .bashrc 打开后添加一行 PS1="[\[\e[3140m\]\u\[\e[3740m\]@\[\e[3440m\]\h\[\e[3740m\]\W]\[\e[0m\\$"保存退出再次登录时显示的颜色也会是我们设定的值了。

echo -e "\033[44375m ME \033[0m COOL"

以上命令设置作用如下:背景色为蓝色,前景色为白色,字体闪烁,输出字符ME,然后重新设置屏幕到缺省设置,输出字符me后颜色回复正常

e是echo的一个可选项,它用于激活特殊字符的解析器。\033引导非常规字符序列。意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是

44375和0。修改44375可以生成不同颜色的组合,数值和编码的前后顺序没有关系。

可以选择的编码如下所示:

编码 颜色/动作

0 重新设置属性到缺省设置

1 设置粗体

2 设置一半亮度(模拟彩色显示器的颜色)

4 设置下划线(模拟彩色显示器的颜色)

5 设置闪烁

7 设置反向图象

22 设置一般密度

24 关闭下划线

25 关闭闪烁

27 关闭反向图象

30 设置黑色前景

31 设置红色前景

32 设置绿色前景

33 设置棕色前景

34 设置蓝色前景

35 设置紫色前景

36 设置青色前景

37 设置白色前景

38 在缺省的前景颜色上设置下划线

39 在缺省的前景颜色上关闭下划线

40 设置黑色背景

41 设置红色背景

42 设置绿色背景

43 设置棕色背景

44 设置蓝色背景

45 设置紫色背景

46 设置青色背景

47 设置白色背景

49 设置缺省黑色背景


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7288512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存