Linux Shell输出颜色字符学习笔记(附Python脚本实现自动化定制生成)

齿轮发出咔嚓一声,向前进了一格。而一旦向前迈进,齿轮就不能倒退了。这就是世界的规则。

0x01背景

造了个轮子:御剑师傅的ipintervalmerge的Python版本。觉得打印的提示信息如果是普通格式显示的话,有些LOW,就想要打印颜色字符,于是有了这篇学习笔记。

0x02 原理及格式

原理:

Shell的字符颜色是由转义字符控制的,是系统的输出格式,与具体的编程语言无关。也就是说无论使用何种编程语言,只要按照Shell的输出格式打印输出,就会得到想要的效果。

格式:

\033[n1;n2;n3..m

含义:
转义字符以ESC开头,即\033(ESC的ASCII码为27,自然它的八进制表示就33咯)
n1、n2、n3..代表数字,控制显示方式,前景色,背景色等等;m作为结束。

0x03 显示方式

n显示方式
0缺省值
1粗体
21非粗体(即取消粗体)
2加深颜色(描述可能不准确,具体效果见图)
22取消加深颜色
3斜体
23取消斜体
4下划线
24取消下划线
5、6测试没有任何效果
7反亮显示
27取消反亮显示

测试:
png1

0x04 前景色

n前景色
30黑色
31红色
32绿色
33黄色
34蓝色
35紫色
36青色
37白色

测试(使用了粗体,效果更明显):
png2

0x05 背景色

n背景色
40黑色
41红色
42绿色
43黄色
44蓝色
45紫色
46青色
47白色

测试:
png3

0x06 Python脚本实现自动化定制生成

S={'S0':0,'S1':1,'S2':2,'S3':3,'S4':4,'S7':7} #Style
F={'F0':30,'F1':31,'F2':32,'F3':33,'F4':34,'F5':35,'F6':36,'F7':37} #Forecolor
B={'B0':40,'B1':41,'B2':42,'B3':43,'B4':44,'B5':45,'B6':46,'B7':47} #Backcolor

menu='''\033[1;31m[-]S0:Default   [-]S1:Bold    [-]S2:Deepen    [-]S3:Italic
[-]S4:Underline [-]S7:Reversal\033[0m

\033[1;33m[-]F0:Black     [-]F1:Red     [-]F2:Green     [-]F3:Yellow
[-]F4:Blue      [-]F5:Purple  [-]F6:Cyan      [-]F7:White\033[0m

\033[1;36m[-]B0:Black     [-]B1:Red     [-]B2:Green     [-]B3:Yellow
[-]B4:Blue      [-]B5:Purple  [-]B6:Cyan      [-]B7:White\033[0m'''

def main(match,print_string):
    match_list=match.split('+')
    color_string='\033['
    if len(match_list)==1:
        i=-1
    for i in range(len(match_list)-1):
        color_string+=str(eval(match_list[i][0].upper())[match_list[i].upper()])+';'
    color_string+=str(eval(match_list[i+1][0].upper())[match_list[i+1].upper()])+'m'+print_string+'\033[0m'
    return color_string
if __name__ == '__main__':
    print(menu)
    match=input("\033[1;35mPlease enter your desired match:\033[0m")
    print_string=input("\033[1;35mPlease enter the string you want to print:\033[0m")
    print(main(match,print_string))

再补充一个批量的脚本:

import shell_color
import argparse
def main(read_file,write_file):
    match_file=open(read_file,'r')
    match_list=match_file.read().split('\n')
    new_file=open(write_file,'w',encoding='utf8')
    if len(match_list)!=0:
        for match_item in match_list:
            if match_item!='':
                match,write_string=match_item.split(' ')
                new_file.write(shell_color.main(match,write_string)+'\n')
if __name__ == '__main__':
    parser=argparse.ArgumentParser()
    parser.add_argument('-r',help='Match File Path')
    parser.add_argument('-w',help='Write File Path')
    args=parser.parse_args()
    if args.r and args.w:
        main(args.r,args.w)

Usage:
1435816-20190501221555609-2086587813.png

test.txt是你已经写好的要批量生成的格式及内容:
1435816-20190501222659137-259128409.png

1.txt是你要保存的文件名:
1435816-20190501222315489-1025028518.png

虽然是乱码,但是输出还是正常的:
1435816-20190501222530277-1026946314.png

转载于:https://www.cnblogs.com/erfze/p/10800947.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值