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

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:

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

1.txt是你要保存的文件名:

虽然是乱码,但是输出还是正常的:

Linux Shell输出颜色字符学习笔记(附Python脚本实现自动化定制生成)的更多相关文章

  1. 吴裕雄--天生自然python学习笔记:python文档操作自动生成菜单 Word 文件

    许多学校营养午餐的菜单是由教师来轮流制作 ,这是一个 比较烦锁的工作,如 果能自动用教师最熟悉的 Word 文件来生成一个菜单文件,使教师对生成的菜单稍作 修改即可使用,那将是一个不错的主意. 案例要 ...

  2. Linux内核分析第二周学习笔记

    linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  3. linux内核分析第四周学习笔记

    linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  4. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  5. 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接

    [学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...

  6. Noah的学习笔记之Python篇:命令行解析

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  7. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

  8. 学习笔记之Python 3

    学习笔记之Python 3 教程 https://www.cnblogs.com/pegasus923/p/7624416.html 学习笔记之X分钟速成Python3 https://www.cnb ...

  9. Noah的学习笔记之Python篇:函数“可变长参数”

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

随机推荐

  1. linux运维、架构之路-K8s数据管理

    一.Volume介绍 容器和Pod是短暂的,它们的生命周期可能很短,会被频繁的销毁和创建,存在容器中的数据会被清除,为了持久化保存容器的数据,k8s提供了Volume.Volume的生命周期独立于容器 ...

  2. Python—数据类型之列表(List)

    列表的切片 语法:列表[:].列表[::]        综合:列表[(开始索引b):(结束索引e)(:(步长s))] 返回:列表的切片取值时,返回一个列表,规则等同于字符串切片规则. 说明: 开始索 ...

  3. 编译原理--02 自顶向下、自底向上的LR分析复习(清华大学出版社第3版)

    前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 第4章 自顶向下的语法分析方法 确 ...

  4. 【Python之路】特别篇--Python面向对象(初级篇)

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...

  5. Python三引号(triple quotes)

    python中三引号可以将复杂的字符串进行复制: python三引号允许一个字符串跨多行,字符串中可以包含换行符.制表符以及其他特殊字符. 三引号的语法是一对连续的单引号或者双引号(通常都是成对的用) ...

  6. codeforces412A

    Poster CodeForces - 412A The R1 company has recently bought a high rise building in the centre of Mo ...

  7. ETL-拉链算法-带删除的拉链算法

    truncate table CUST;truncate table TAG_CUST; truncate table vt_inc;truncate table vt_new; insert int ...

  8. python3精品解析运算符

    算数运算符 +:两个对象相加 -:得到负数或者,或者一个数减去另一个数 *:两个数相乘或者是返回一个被重复若干次的字符串 /:5/2等于2.1 5//2=2(/有余数,//取整) %:取模(5%2=1 ...

  9. 「Luogu P5602」小E与美食

    题目链接 戳我 \(Solution\) 这道题只需要枚举吃\(k\)个美食,最后在取前\(k\)大的美味值.对于每个算出答案后取\(max\) \(Code\) #include<bits/s ...

  10. 卷boot仅剩余XX空间

    参见: https://blog.csdn.net/hnzcdy/article/details/52381844