ksh 格式化输出

来源:互联网 发布:编程中绝对值怎么表示 编辑:程序博客网 时间:2024/06/05 14:46

-- Start

几乎所有的语言都支持 printf 函数,ksh 也不例外。下面我们来看一个简单的例子.

#!/bin/kshprintf "printf example:%,30.6f" 9876543210.0123456789;

结果如下:

printf example:          9,876,543,210.012346

%,30.6f 被称为格式符(format specifier), 格式符由以下几部分组成:

%[flags][width][.precision]conversion  %  ,      30      .6         f  

  • %是必须的, 任何格式符都由百分号开始.
  • flags 是可选的, 详见下表.
  • width 是可选的, 表示输出的宽度.
  • precision 可选的, precision 依赖于 conversion, 详见下表.
  • conversion 是必须的, 表示如何格式化参数, 详见下表.
ksh 支持如下转换符(conversion)。

转换符           描述 d               十进制整数,也可进制转换 i               十进制整数 u               无符号十进制整数  e               浮点数科学计数法 E               浮点数科学计数法 f               浮点数 g               %e 或 %f, 取决于哪个更短, 删除尾部0 G               %E 或 %f, 取决于哪个更短, 删除尾部0 o               无符号八进制整数 x               无符号十六进制整数(a-f for 10 to 15) X               无符号十六进制整数(A-F for 10 to 15) c               ASCII 字符 (打印第一个字符) %               % s               字符串 b                %s,支持更多的转义字符 H                %s,转成 HTML 字符,如:空格转成   P                %s,把 egrep 风格的正则表达式转成 ksh 风格 R                %s,把 ksh 风格的正则表达式转成 egrep 风格 q                %s,打印成 $'...' 风格 n               到字符串的长度 (date format)T  格式化日期

日期和时间转换符

转换符(Conversion)描述(Description)Y                4位数字的年(前面补0)m                月,01-12d                日,01-31H                小时,00-23M                分钟,00-59S                秒,00-60I                小时,01-12N                纳秒,000000000 - 999999999P                本地敏感, PM or AMp                本地敏感,pm or amz                时区偏移量, 如 +0800Z                时区s                从格林威治时间1970-01-01 00:00:00起的秒数B                月的完整拼写b/h                月的缩写A                星期的完整拼写a                星期的缩写y                年的后两位数字(前面补0)C                年的前两位数字(前面补0)j                一年的第几天,001-366e                日,1-31R                24小时时间,如 18:05T                24小时时间,如 18:05:19r                12小时时间, 如 06:05:19 pmD                美国格式的日期(月/日/年),如 02/09/2004F                ISO 8601 日期, 如 2004-02-09c                完整的日期和时间,如 Tue Oct  6 09:15:27 2015k                完整的日期和时间,如 Tue Oct  6 09:18:22 EDT 2015l                   完整的日期和时间,如 Oct  6 09:19L                   完整的日期和时间,如  Tue Oct  6 09:20:17 EDT 2015


ksh 支持如下标志(flag)

标志         描述               举例-           左对齐             |3333.33 |空格         在正数之前添加空格    | 3333.33|,|-3333.33|+           打印正负数符号       |+3333.33|,|-3333.33|0           数字前面补0         |003333.33|,           添加千分位          |3,333.33|#(对于%o)    添加前缀0           |0515|#(对于%x)    添加前缀0x      |0x1bc|#(对于%X)    添加前缀0X      |0X1bc|#(对于%e)    添加小数点          |1.000000e+01|#(对于%E)    添加小数点          |1.000000E+01|#(对于%f)    添加小数点          | 10.000000|#(对于%g)    不删除尾部0         |10.4000|#(对于%G)    不删除尾部0         |10.4000|

ksh 精度(precision)的意义。

转换符                 精度意义%d,%i,%o,%u,%x,%X    最少数字位数,如果数字位数少于精度,添加前缀0%e, %E               最少数字位数,如果数字位数少于精度,添加后缀0%f                   小数的位数%g, %G               最多数字位数%s                   字符位数

一些例子。

#!/bin/ksh# %b 同 %s,支持更多的转义字符printf "%b\n" 'hello\nworld';# %H 同 %s,转成 HTML 字符,如:空格转成  printf "%H\n" "Here are real < and > characters";# %P 同 %s,把 egrep 风格的正则表达式转成 ksh 风格printf "%P\n" '(.*\.o|.*\.obj|core)+';# %R 同 %s,把 ksh 风格的正则表达式转成 egrep 风格printf "%R\n" '+(*.o|*.c)';# %q 同 %s,打印成 $'...' 风格printf "print %q\n" "a string with ' and \" in it"# %d,进制转换printf '42 is %.3.5d in base 5\n' 42# %n 得到字符串的长度printf "hello, world\n%n" msglen;print $msglen;# %(date format)T, 格式化日期printf "%(It is now %Y-%m-%d %H:%M:%S)T\n" "$(date)"

-- 更多参见:ksh 精萃

-- 声 明:转载请注明出处

-- Last Updated on 2015-10-06
-- Written by ShangBo on 2015-10-06
-- End


0 0