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"   

[root@dm ~]# printf "%f\n"
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 )"   ;echo ""
( )( )( )

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

[root@dm ~]# printf "%s\t"   ;echo ""
        

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

[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" 姓名 性别 年龄 小明 男  小红 女
姓名 性别 年龄
小明 男
小红 女
[root@dm ~]# printf "%7s %5s %4s\n" 姓名 性别 年龄 小明 男 小红 女
姓名 性别 年龄
小明 男
小红 女
[root@dm ~]# printf "%-7s %-5s %-4s\n" 姓名 性别 年龄 小明 男 小红 女
姓名 性别 年龄
小明 男
小红 女

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

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

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

[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" 烈火兽  冰晶兽 -
灵宠名称 体温
烈火兽 +
冰晶兽 -

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

[root@dm ~]# printf "%s and %d \n"
and

Linux printf命令详解的更多相关文章

  1. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  2. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  3. printf命令详解

    基础命令学习目录首页 本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中 ...

  4. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  5. linux cat 命令详解

    linux cat 命令详解 http://linux.chinaunix.net/techdoc/system/2007/11/16/972467.shtml adb shell su //这个不一 ...

  6. 【初级】linux rm 命令详解及使用方法实战

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...

  7. Linux netstat命令详解

    Linux netstat命令详解 一  简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多 ...

  8. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  9. Linux chmod命令详解

    Linux chmod命令详解 chmod----改变一个或多个文件的存取模式(mode)   chmod [options] mode files   只能文件属主或特权用户才能使用该功能来改变文件 ...

随机推荐

  1. java基础知识—循环结构

    1.while 循环 语法: while(循环操作){ 循环操作: } 特点:先判断,再执行:2. == : 用于数字比较 比较的是地址 equals: 用于字符串比较 比较的是字符 3.do-whi ...

  2. list练习

    usernames = ['cwl','pn','gxn','hyp']passwords = ['123456','abc123','324234','23423']#pn#sdfsdf #需要校验 ...

  3. Oracle学习DaySix(PL/SQL续)

    一.游标 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现.游标是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上 下文区会发生些 ...

  4. Qt的子窗口和父窗口阻塞问题

    在图形界面中,软件设计者通常需要将活跃窗口限制为一个.在某个窗口活跃时,它的父窗口被它挡住或者挡住一部分,这时候用鼠标去点击父窗口是没有作用的.问题的关键在于将子窗口设置模态: void MainWi ...

  5. 安装oracle11g client 【INS-30131】执行安装程序验证所需的初始设置失败的解决方法

    今天在服务器(操作系统windows server 2008R2)上安装Oracle11g 客户端,弹出“执行安装程序验证所需的初始设置失败”,如上图.网上找了一些方法,简单整理如下,仅供参考. 问题 ...

  6. render函数(转)

    https://blog.csdn.net/qq78827534/article/details/80792514

  7. NHibernate4使用Oracle.ManagedDataAccess.dll连接oracle及配置多个数据库连接

    NHibernate数据库配置参数在hibernate.cfg.xml中 <?xml version="1.0" encoding="utf-8"?> ...

  8. css缩放的坑

    transform:scale()缩放后会往中间聚集.transform-origin: top left可以让他看上去是沿着左上角缩放. .zoom { transform: scale(.8); ...

  9. eclipse使用技巧心得分享

    eclipse使用技巧心得分享   习惯了eclipse开发java程序,公司最近的项目都是idea开发的,同时android studio也是idea原型开发的,在学android开发,所以脱离ec ...

  10. 阿里云上rabbitmq安装

    环境:CentOS Linux release 7.4.1708 (Core)   rabbitmq-server-3.7.13-1.el7.noarch.rpm  阿里云服务器 1.安装elang ...