• 如何在终端中打印带颜色的文本


    echo命令


    echo是终端下最常用的命令之一,用于在显示器上显示一段文字。一般格式为: echo [ -option ] 字符串

    它有2个常用的选项,一个是-n,另一个是-e,下面的图就是 man echo 的结果:

    image

    echo将字符串输出后是会自动换行的,如果不想换行就需要加上-n选项。

    -e的作用是强大的,想要输出有颜色的文字就不得不用借助于-e了。为什么要带颜色?看看下图就知道了

    image

    都是毛大头,快速辨别的方法就是看数字和颜色。如若看不到数字,单看颜色也能一眼辨别。

    -e:启用反斜线控制字符的转换,echo 命令所支持的反斜线控制字符如下图:

    image

    \:反斜线本身
    a:ALERT / BELL (从系统喇叭送出铃声)
    :BACKSPACE,退格键
    c:取消行末换行符号(跟-n的作用一样)
    e:ESCAPE键
    f:FORMFEED,换页字符
    :NEWLINE,换行字符
    :RETURN,回车键
    :TAB,表格跳位键
    v:VERTICAL TAB,垂直表格跳位键
    NNN:ASCII 八进位编码
    xHH:ASCII 十六进位编码

     

    # echo $?
    //显示最后运行的命令的结束代码(返回值)

    give you some color see see


    在终端可以这样做:

    echo -e "33[31mhello"
    echo -e "33[31mhello33[0m"

    e[0m会将颜色重新置回,什么时候想重置就什么时候加。

     

    echo -e "33[31mhello"
    echo -e "e[31mhello"

    显示的效果是一样的,因为33和e是一样的。怎么一样呢?

    echo -e "e"    // 表示键盘左上角的Esc键
    echo -e "33"  // 八进制转义,表示Esc键
    echo -e "x1b"  // 16进制转义,表示Esc键
    echo -e "e[31mhello"
    echo -e "e[32mhello"

    控制前景色的就是31这个位置的具体数字。

    另外,GitHub上一个叫cecho的项目,能够方便地实现彩色打印。

     

    在C程序中可以这样做:

    #include <stdio.h>
    int main()
    {
        printf("33[35mabc
    ");
        printf("e[31mdefe[0m
    ");
    }

    运行后可以看到紫色的abc和红色的def:

     

    why?


    终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能。

    和具体的语言无关,所以C语言中的 printf/fprintf 函数也可以这样使用。

    本文最重要的一句话,所有的问题都在这里,看明白了就知道怎么改变文本的显示方式了:

    33[显示方式;前景色;背景色m

    把33换成e是一样的:

    e[显示方式;前景色;背景色m

    解释:

    ①颜色的转义序列是以 ESC 开头

    ②显示方式:0(默认值)、1(高亮)、

    22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)

    ③前景色:

    30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)

    ④背景色:

    40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色)

    ⑤33[0m表示默认,可以关闭前边设置的任何效果

    image

     

    注意:echo的字符串这时必须用引号括起来。

    image

     

    33[ 的其他格式


     33[nA   光标上移n行 
    3[nB    光标下移n行 
    33[nC   光标右移n行 
    33[nD   光标左移n行 
    33[y;xH 设置光标位置 
    33[2J   清屏 
    33[K    清除从光标到行尾的内容 
    33[s    保存光标位置 
    33[u    恢复光标位置 
    33[?25l 隐藏光标 
    33[?25h  显示光标

     

    C语言的 printf 函数也好色


     为了人性化地在 printf 函数中进行着色输出,可以定义成一系列的宏。下边的宏定义不是我写的,来自这篇博客:

    http://www.cnblogs.com/clover-toeic/p/4031618.html

    #define NONE                 "e[0m"
    #define BLACK                "e[0;30m"
    #define L_BLACK              "e[1;30m"
    #define RED                  "e[0;31m"
    #define L_RED                "e[1;31m"
    #define GREEN                "e[0;32m"
    #define L_GREEN              "e[1;32m"
    #define BROWN                "e[0;33m"
    #define YELLOW               "e[1;33m"
    #define BLUE                 "e[0;34m"
    #define L_BLUE               "e[1;34m"
    #define PURPLE               "e[0;35m"
    #define L_PURPLE             "e[1;35m"
    #define CYAN                 "e[0;36m"
    #define L_CYAN               "e[1;36m"
    #define GRAY                 "e[0;37m"
    #define WHITE                "e[1;37m"
    
    #define BOLD                 "e[1m"
    #define UNDERLINE            "e[4m"
    #define BLINK                "e[5m"
    #define REVERSE              "e[7m"
    #define HIDE                 "e[8m"
    #define CLEAR                "e[2J"
    #define CLRLINE              "
    e[K" //or "e[1K
    "

    使用时就像这样:

    printf(RED "RED " L_RED "L_RED
    " NONE);

    附录-ASCII码表


    ASCII码表
    八进制十六进制十进制字符八进制十六进制十进制字符
    00 00 0 nul 100 40 64 @
    01 01 1 soh 101 41 65 A
    02 02 2 stx 102 42 66 B
    03 03 3 etx 103 43 67 C
    04 04 4 eot 104 44 68 D
    05 05 5 enq 105 45 69 E
    06 06 6 ack 106 46 70 F
    07 07 7 bel 107 47 71 G
    10 08 8 bs 110 48 72 H
    11 09 9 ht 111 49 73 I
    12 0a 10 nl 112 4a 74 J
    13 0b 11 vt 113 4b 75 K
    14 0c 12 ff 114 4c 76 L
    15 0d 13 cr 115 4d 77 M
    16 0e 14 so 116 4e 78 N
    17 0f 15 si 117 4f 79 O
    20 10 16 dle 120 50 80 P
    21 11 17 dc1 121 51 81 Q
    22 12 18 dc2 122 52 82 R
    23 13 19 dc3 123 53 83 S
    24 14 20 dc4 124 54 84 T
    25 15 21 nak 125 55 85 U
    26 16 22 syn 126 56 86 V
    27 17 23 etb 127 57 87 W
    30 18 24 can 130 58 88 X
    31 19 25 em 131 59 89 Y
    32 1a 26 sub 132 5a 90 Z
    33 1b 27 esc 133 5b 91 [
    34 1c 28 fs 134 5c 92
    35 1d 29 gs 135 5d 93 ]
    36 1e 30 re 136 5e 94 ^
    37 1f 31 us 137 5f 95 _
    40 20 32 sp 140 60 96 '
    41 21 33 ! 141 61 97 a
    42 22 34 " 142 62 98 b
    43 23 35 # 143 63 99 c
    44 24 36 $ 144 64 100 d
    45 25 37 % 145 65 101 e
    46 26 38 & 146 66 102 f
    47 27 39 ` 147 67 103 g
    50 28 40 ( 150 68 104 h
    51 29 41 ) 151 69 105 i
    52 2a 42 * 152 6a 106 j
    53 2b 43 + 153 6b 107 k
    54 2c 44 , 154 6c 108 l
    55 2d 45 - 155 6d 109 m
    56 2e 46 . 156 6e 110 n
    57 2f 47 / 157 6f 111 o
    60 30 48 0 160 70 112 p
    61 31 49 1 161 71 113 q
    62 32 50 2 162 72 114 r
    63 33 51 3 163 73 115 s
    64 34 52 4 164 74 116 t
    65 35 53 5 165 75 117 u
    66 36 54 6 166 76 118 v
    67 37 55 7 167 77 119 w
    70 38 56 8 170 78 120 x
    71 39 57 9 171 79 121 y
    72 3a 58 : 172 7a 122 z
    73 3b 59 ; 173 7b 123 {
    74 3c 60 < 174 7c 124 |
    75 3d 61 = 175 7d 125 }
    76 3e 62 > 176 7e 126 ~
    77 3f 63 ? 177 7f 127 del
  • 相关阅读:
    Remote Desktop manager 连接后无法自动登录
    .net framework 源码调试 与 问题解决
    SQLSever--基础学习--创建登录用户&创建数据库用户&分配权限
    sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解
    python 脚本备份mssql数据库并删除数据库
    python 脚本bak文件还原mssql数据库
    python3 爬虫利用Requests 实现下载进度条
    MySQL的四种事务隔离级别
    查看mysql的版本号
    haproxy 配置文件详解 之 backend
  • 原文地址:https://www.cnblogs.com/luoxu34/p/5239675.html
Copyright © 2020-2023  润新知