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/) ...
随机推荐
- puppet负载均衡之nginx+passenger
由于3.x系列已不再支持mongrel,所以就采用nginx+passenger来做负载均衡:之前有发过nginx+mongrel,puppet version是2.7系列的,所以还是可以用的: 环境 ...
- BZOJ 4003 / Luogu P3261 [JLOI2015]城池攻占 (左偏树)
左偏树裸题,在树上合并儿子传上来的堆,然后小于当前结点防御值的就pop掉,pop的时候统计答案. 修改的话就像平衡树一样打懒标记就行了. 具体见代码 CODE #include<bits/std ...
- 设计一个Mypoint类,求两个点之间的距离
package Test; public class test6 { public static void main(String[] args) { // TODO Auto-generated m ...
- [学习笔记] 可持久化线段树&主席树
众所周知,线段树是一个非常好用也好写的数据结构, 因此,我们今天的前置技能:线段树. 然而,可持久化到底是什么东西? 别急,我们一步一步来... step 1 首先,一道简化的模型: 给定一个长度为\ ...
- python学习_新闻联播文字版爬虫(V 1.0版)
python3的爬虫练习,爬取的是新闻联播文字版网站 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' __author__ = 'wyf349' _ ...
- cogs服务点设置(不凶,超乖) x
cogs3. 服务点设置 ★ 输入文件:djsa.in 输出文件:djsa.out 简单对比时间限制:1 s 内存限制:128 MB 问题描述为了进一步普及九年义务教育,政府要在某乡镇 ...
- A. Sea Battle
A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- vue中如何刷新页面
vue中刷新页面的方法 1. 不能使用 this.$router.go(0) 或者 window.reload() 不起作用还特别恶心 这个才是有效果的刷新页面,只要照图敲,就能有效果 我们在 app ...
- golang 性能剖析pprof
作为一个golang coder,使用golang编写代码是基本的要求. 能够写出代码,并能够熟悉程序执行过程中各方面的性能指标,则是更上一层楼. 如果在程序出现性能问题的时候,可以快速定位和解决问题 ...
- mysql常用操作与日志
在linux上的mysql命令 mysql -e "mysql内部命令" #可在外部显示myslq内的输出,-e可跟多条命令用;隔开 在mysql内的mysql命令 system ...