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

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. 一篇文章让您了解MQTT

    转载:https://www.jianshu.com/p/de88edf8e023 什么是MQTT ​ MQTT是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASI ...

  2. jquery实现input输入框点击加减数值随之变动

    <input class="addBtn min" type="button" value="-" /><input cl ...

  3. Logitech G系鼠标脚本编程,实现鼠标自动定位控制

    利用罗技官方提供的API来写一个鼠标自动定位移动脚本 点击脚本编辑器中的帮助选项,查看罗技官方提供的API说明,有很多实现好的鼠标功能 G-series Lua API V8.45 Overview ...

  4. 【Python之路】特别篇--Python文件操作

    文件操作 open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: (1)打开文件 (2)操作文件 一.打开文件 文件句柄 = open('文件路径', '模式','编码') 打开文件时, ...

  5. jquery clearQueue方法 语法

    jquery clearQueue方法 语法 作用:clearQueue() 方法停止队列中所有仍未执行的函数.与 stop() 方法不同,(只适用于动画),clearQueue() 能够清除任何排队 ...

  6. 路由器配置——单臂路由实现VLAN间通信

    一.实验目的:用路由器使同和不同vlan可以通信 二.拓扑图如下: 三.具体步骤: (1)R1路由器配置: Router>en  --进入特权模式Router#conf t  --进入全局配置模 ...

  7. 7.2 Mybatis

    7.2 Mybatis 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问 ...

  8. 从零开始学习Gradle之三---多项目构建

       随着信息化的快速发展,IT项目变得越来越复杂,通常都是由多个子系统共同协作完成.对于这种多系统.多项目的情况,很多构建工具都已经提供了不错的支持,像maven.ant.Gradle除了借鉴了an ...

  9. C++入门经典-例7.2-利用构造函数初始化成员变量

    1:在创建对象时,程序自动调用构造函数.同一个类中可以有多个构造函数,通过这样的形式创建一个CPerson对象,例如: CPerson p1(0,"jack",22,7000); ...

  10. Java实现字串统计

    对字符串的操作,无论再难的算法题,只要时间充足,相信每个同学都可以搞定. 但是浪费太多时间去搞一个逻辑算法没太大意义,学会学习,不但可以增长自己的知识,更可以节省时间,俗话说,一寸光阴一寸金,寸金难买 ...