Linux printf命令
printf命令模仿了C語言中的printf()函數。主要作用是輸出文本,按照我們指定的格式輸出文本。還有一個輸出文本的命令echo,在輸出文本時,echo會換行。printf命令不會對輸出文本進行換行。可以使用 \n 。但是printf命令的優勢是格式化文本。示例如下:
[root@dm ~]# echo 'string' string [root@dm ~]# printf 'string' string[root@dm ~]# [root@dm ~]# printf 'string\n' string
語法:
printf format-string [arguments...]
需求把aa bb cc dd ee按照空格分段,每段單獨一行。有以下幾種方法:
[root@dm ~]# echo -e "aa \nbb \ncc \ndd \nee" aa bb cc dd ee [root@dm ~]# printf "aa \nbb \ncc \ndd \nee \n" aa bb cc dd ee [root@dm ~]# printf "%s\n" aa bb cc dd ee aa bb cc dd ee
在字段非常多的時候,明顯前兩種方法不合適。在第三種方法中,"%s\n"是指定的格式。后面的每一個字符串,都被當做參數傳入到printf命令中,並按照指定的格式進行了格式化。%s是格式替代符,代表了每一個傳入的參數。並將它們轉化為字符串類型。%f也代表每一個傳入的參數,將他們轉化為浮點型。
[root@dm ~]# printf "%s\n" 1 5 12 1 5 12 [root@dm ~]# printf "%f\n" 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字符
\b 后退
\c 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),而且,任何留在參數里的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略
\f 換頁
\n 換行
\r 回車
\t 水平制表符
\v 垂直制表符
\\ 一個字面上的反斜杠字符,即 \ 本身
\ddd 表示1到3位數八進制值的字符。僅在格式字符串中有效
\0ddd 表示1到3位的八進制值字符
示例:
1、將每一個傳入的參數兩邊添加括號,並且括號內測需要有空格
[root@dm ~]# printf "( %s )" 1 5 12;echo "" ( 1 )( 5 )( 12 )
2、將每個傳入的參數用制表符隔開
[root@dm ~]# printf "%s\t" 1 2 13;echo "" 1 2 13
如果我們在格式中使用多個格式替代符。那么指定格式中包含格式替代符的數量,就是每次格式參數的數量。
[root@dm ~]# printf "%s\n" a b c d e f a b c d e f [root@dm ~]# printf "%s %s\n" a b c d e f a b c d e f [root@dm ~]# printf "%s%s\n" a b c d e f ab cd ef
如上所示,每次格式化時傳入兩個參數。前一個參數對應第一個替代符,后一個參數對應第二個替代符。
用法二:在原來的格式替代符中加入數字,如%7s表示當前替換符對應的輸出寬度為7個字符。如果對應的輸出不滿七個字符,則用空格補全,如果輸出長度超過七個字符,超出部分也會顯示。這些數字被稱作修飾符,修飾符對相應的替換符進行修飾。
[root@dm ~]# printf "%s %s %s\n" 姓名 性別 年齡 小明 男 23 小紅 女 25 姓名 性別 年齡 小明 男 23 小紅 女 25 [root@dm ~]# printf "%7s %5s %4s\n" 姓名 性別 年齡 小明 男 23 小紅 女 25 姓名 性別 年齡 小明 男 23 小紅 女 25 [root@dm ~]# printf "%-7s %-5s %-4s\n" 姓名 性別 年齡 小明 男 23 小紅 女 25 姓名 性別 年齡 小明 男 23 小紅 女 25
其中 - 也是修飾符表示左對齊,默認不加 - 表示右對齊。還有一個修飾符 + 但是+不表示右對齊。在使用修飾符時,顯示正數前面的正號。示例如下:
[root@dm ~]# printf "靈寵名稱 體溫\n";printf "%10s %5d\n" 烈火獸 180 冰晶獸 -70 靈寵名稱 體溫 烈火獸 180 冰晶獸 -70 [root@dm ~]# printf "靈寵名稱 體溫\n";printf "%10s %+5d\n" 烈火獸 180 冰晶獸 -70 靈寵名稱 體溫 烈火獸 +180 冰晶獸 -70
數字修飾符還有一種特殊用法
[root@dm ~]# printf "靈寵名稱 體溫\n";printf "%10s %+12f\n" 烈火獸 180.23443 冰晶獸 -70.3425 靈寵名稱 體溫 烈火獸 +180.234430 冰晶獸 -70.342500 [root@dm ~]# printf "靈寵名稱 體溫\n";printf "%10s %+12.3f\n" 烈火獸 180.23443 冰晶獸 -70.3425 靈寵名稱 體溫 烈火獸 +180.234 冰晶獸 -70.342
當替換符為%f時,如果數字修飾符帶有小數點。則小數點后邊的數字表示對應的小數精度。當替換符為%d時,則數字修飾符小數點后的數字表示整數的長度,長度不夠時高為用0補全
[root@dm ~]# printf "靈寵名稱 體溫\n";printf "%10s %+12.5d\n" 烈火獸 180 冰晶獸 -70 靈寵名稱 體溫 烈火獸 +00180 冰晶獸 -00070
注意:如果沒有 arguments,那么 %s 用NULL代替,%d 用 0 代替
[root@dm ~]# printf "%s and %d \n" and 0