• Linux printf命令详解


    Linux printf命令

    printf命令模仿了C语言中的printf()函数。主要作用是输出文本,按照我们指定的格式输出文本。还有一个输出文本的命令echo,在输出文本时,echo会换行。printf命令不会对输出文本进行换行。可以使用 。但是printf命令的优势是格式化文本。示例如下:

    [root@dm ~]# echo 'string'
    string
    [root@dm ~]# printf 'string'
    string[root@dm ~]# 
    [root@dm ~]# printf 'string
    '
    string

    语法:

    printf  format-string  [arguments...]

    需求把aa bb cc dd ee按照空格分段,每段单独一行。有以下几种方法:

    [root@dm ~]# echo -e "aa 
    bb 
    cc 
    dd 
    ee"
    aa 
    bb 
    cc 
    dd 
    ee
    [root@dm ~]# printf "aa 
    bb 
    cc 
    dd 
    ee 
    "
    aa 
    bb 
    cc 
    dd 
    ee 
    [root@dm ~]# printf "%s
    " aa bb cc dd ee
    aa
    bb
    cc
    dd
    ee

    在字段非常多的时候,明显前两种方法不合适。在第三种方法中,"%s "是指定的格式。后面的每一个字符串,都被当做参数传入到printf命令中,并按照指定的格式进行了格式化。%s是格式替代符,代表了每一个传入的参数。并将它们转化为字符串类型。%f也代表每一个传入的参数,将他们转化为浮点型。

    [root@dm ~]# printf "%s
    " 1 5 12
    1
    5
    12
    [root@dm ~]# printf "%f
    " 1 5 12
    1.000000
    5.000000
    12.000000

    常用的格式替代符还有以下几种

    格式替代符:

    %s 字符串

    %f 浮点型

    %b 相对应参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符被转义。

    %c ASCII字符,显示想对应参数的第一个字符。

    %d, %i 十进制整数

    %o 不带正负号的八进制值

    %u 不带正负号的十进制值

    %x 不带正负号的十六进制值,使用a至f表示10到15

    %X 不带正负号的十六进制值,使用A至F表示10到15

    %% 表示 % 本身

    转义字符:

    a 警告字符,通常为ASCII的BEL字符

     后退

    c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略

    f 换页

    换行

    回车

    水平制表符

    v 垂直制表符

    \ 一个字面上的反斜杠字符,即 本身

    ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效

    ddd 表示1到3位的八进制值字符

    示例:

    1、将每一个传入的参数两边添加括号,并且括号内测需要有空格

    [root@dm ~]# printf "( %s )" 1 5 12;echo ""
    ( 1 )( 5 )( 12 )

    2、将每个传入的参数用制表符隔开

    [root@dm ~]# printf "%s	" 1 2 13;echo ""
    1    2    13

    如果我们在格式中使用多个格式替代符。那么指定格式中包含格式替代符的数量,就是每次格式参数的数量。

    [root@dm ~]# printf "%s
    " a b c d e f
    a
    b
    c
    d
    e
    f
    [root@dm ~]# printf "%s %s
    " a b c d e f
    a b
    c d
    e f
    [root@dm ~]# printf "%s%s
    " a b c d e f
    ab
    cd
    ef

    如上所示,每次格式化时传入两个参数。前一个参数对应第一个替代符,后一个参数对应第二个替代符。 

    用法二:在原来的格式替代符中加入数字,如%7s表示当前替换符对应的输出宽度为7个字符。如果对应的输出不满七个字符,则用空格补全,如果输出长度超过七个字符,超出部分也会显示。这些数字被称作修饰符,修饰符对相应的替换符进行修饰。

    [root@dm ~]# printf "%s %s %s
    " 姓名 性别 年龄 小明 男 23 小红 女 25
    姓名 性别 年龄
    小明 男 23
    小红 女 25
    [root@dm ~]# printf "%7s %5s %4s
    " 姓名 性别 年龄 小明 男 23 小红 女 25
     姓名 性别 年龄
     小明   男   23
     小红   女   25
    [root@dm ~]# printf "%-7s %-5s %-4s
    " 姓名 性别 年龄 小明 男 23 小红 女 25
    姓名  性别 年龄
    小明  男   23  
    小红  女   25 

    其中 - 也是修饰符表示左对齐,默认不加 - 表示右对齐。还有一个修饰符 + 但是+不表示右对齐。在使用修饰符时,显示正数前面的正号。示例如下:

    [root@dm ~]# printf "灵宠名称 体温
    ";printf "%10s %5d
    " 烈火兽 180 冰晶兽 -70
    灵宠名称 体温
     烈火兽   180
     冰晶兽   -70
    [root@dm ~]# printf "灵宠名称 体温
    ";printf "%10s %+5d
    " 烈火兽 180 冰晶兽 -70
    灵宠名称 体温
     烈火兽  +180
     冰晶兽   -70

    数字修饰符还有一种特殊用法

    [root@dm ~]# printf "灵宠名称 体温
    ";printf "%10s %+12f
    " 烈火兽 180.23443 冰晶兽 -70.3425
    灵宠名称 体温
     烈火兽  +180.234430
     冰晶兽   -70.342500
    [root@dm ~]# printf "灵宠名称 体温
    ";printf "%10s %+12.3f
    " 烈火兽 180.23443 冰晶兽 -70.3425
    灵宠名称 体温
     烈火兽     +180.234
     冰晶兽      -70.342

    当替换符为%f时,如果数字修饰符带有小数点。则小数点后边的数字表示对应的小数精度。当替换符为%d时,则数字修饰符小数点后的数字表示整数的长度,长度不够时高为用0补全

    [root@dm ~]# printf "灵宠名称 体温
    ";printf "%10s %+12.5d
    " 烈火兽 180 冰晶兽 -70
    灵宠名称 体温
     烈火兽       +00180
     冰晶兽       -00070

    注意:如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替

    [root@dm ~]# printf "%s and %d 
    " 
     and 0 
  • 相关阅读:
    【转】 矩阵构造方法
    CODEVS1187 Xor最大路径 (Trie树)
    POJ2001 Shortest Prefixes (Trie树)
    CODEVS1079 回家 (最短路)
    CODEVS2144 砝码称重2 (哈希表)
    CODEVS1380 没有上司的舞会 (树形DP)
    JAVA 多态和异常处理作业——动手动脑以及课后实验性问题
    再读大道之简第七章第八章
    JAVA 接口与继承作业——动手动脑以及课后实验性问题
    再读大道至简第六章
  • 原文地址:https://www.cnblogs.com/jkin/p/10758802.html
Copyright © 2020-2023  润新知