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/) ...
随机推荐
- hive日期函数-杂谈(一)
来到广发返现由于历史遗留问题很多时间格式十分杂乱 我将总结一下时间日期的事情 1.hive原生时间函数的功能 2.一些基本业务时间范围的指标的sql案例 3.自定义udf函数让后来人更方便
- BOOST 解析,修改,生成xml样例
解析XML 解析iworld XML,拿到entity和VisibleVolume的数据 int ParseiWorlds::readXML(const bpath &dir) { ptree ...
- 【学习备份】ajax添加小例子
实现目的:保存模板编号.模板名称到数据库 1.js引用 <script src="../../../../../../../js/jquery-1.10.2.min.js"& ...
- vs2017 gitee项目无法提交同步的解决办法
下载扩展跟更新: gitee插件 然后命令行输入: git push --set-upstream origin master 参考 https://www.cnblogs.com/slwangzi ...
- jmeter常见问题小结
1,报500,查看信息头中的Content-Type 2,https的端口号是443 3,同一个线程组中,不同请求分别用到的字段都可以直接写在‘HTTP信息头管理器’中 4,Debug Sampler ...
- xml配置文件 操作
public class ConfigFile { protected readonly string configBasePath = "Root/Config"; /// &l ...
- hdu 5821 Ball 思维题
Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- 博弈dp入门 POJ - 1678 HDU - 4597
本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...
- Thread(简单使用)
/***thread.c***/#include<stdio.h> #include<stdlib.h> #include<pthread.h> void prin ...
- SpringMVC——入门
一.SpringMVC介绍: Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请 ...