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 | 取消反亮显示 |
测试:
0x04 前景色
| n | 前景色 |
|---|---|
| 30 | 黑色 |
| 31 | 红色 |
| 32 | 绿色 |
| 33 | 黄色 |
| 34 | 蓝色 |
| 35 | 紫色 |
| 36 | 青色 |
| 37 | 白色 |
测试(使用了粗体,效果更明显):
0x05 背景色
| n | 背景色 |
|---|---|
| 40 | 黑色 |
| 41 | 红色 |
| 42 | 绿色 |
| 43 | 黄色 |
| 44 | 蓝色 |
| 45 | 紫色 |
| 46 | 青色 |
| 47 | 白色 |
测试:
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脚本实现自动化定制生成)的更多相关文章
- 吴裕雄--天生自然python学习笔记:python文档操作自动生成菜单 Word 文件
许多学校营养午餐的菜单是由教师来轮流制作 ,这是一个 比较烦锁的工作,如 果能自动用教师最熟悉的 Word 文件来生成一个菜单文件,使教师对生成的菜单稍作 修改即可使用,那将是一个不错的主意. 案例要 ...
- Linux内核分析第二周学习笔记
linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- linux内核分析第四周学习笔记
linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
[学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...
- Noah的学习笔记之Python篇:命令行解析
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- 学习笔记之Python 3
学习笔记之Python 3 教程 https://www.cnblogs.com/pegasus923/p/7624416.html 学习笔记之X分钟速成Python3 https://www.cnb ...
- Noah的学习笔记之Python篇:函数“可变长参数”
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
随机推荐
- npm报错 This is probably not a problem with npm,there is likely additional logging output above可能的原因
npm WARN Local package.json exists, but node_modules missing, did you mean to install? 解决方法: 输入npm i ...
- numpy中np.linalg.norm()求向量、矩阵的范数
np.linalg.norm() # linalg = linear(线性) + algebra(代数), norm表示范数 x_norm = np.linalg.norm(x, ord=None ...
- BZOJ3331压力
码量略大. 题意就是求路径必经点. tarjan缩点,所有的非割点只有是起点终点时才必经,直接开个ans数组就OK了. 至于割点,因为缩完点之后的图是vDcc和割点共同组成的,而且题目说连通,那就是棵 ...
- 一本学习HTTP很好的书《图解HTTP》
网上电子版的一堆(*^__^*) 嘻嘻……
- javascript 取小数点后几位四种方法
javascript 取小数点后几位方法总结 Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取. function getn ...
- mvp解读
mvp存在的问题 1.业务复杂时,可能使得Activity变成更加复杂,比如要实现N个IView,然后写更多个模版方法. 2.业务复杂时,各个角色之间通信会变得很冗长和复杂,回调链过长. 3.Pres ...
- linux 之 pthread_create 实现类的成员函数做参数
在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...
- rocketmq的以集群模式MessageModel.CLUSTERING实现消费者集群消费消息,实现负载均衡
package com.bfxy.rocketmq.model; import java.util.List; import org.apache.rocketmq.client.consumer.D ...
- layui 表单遇到的小问题
select中的option 居中显示 /*select显示的option居中*/ /*.layui-select-title input{ text-align: center; }*/ /*opt ...
- Linux特点
开放性 多用户 多任务 丰富的网络功能 可靠的系统安全 良好的可移植性 具有标准兼容性 良好的用户界面(命令界面,图形界面等) 出色的速度性能.