linux之格式化输出

相关工具

nl -添加行号(Number lines)
fold -限制文本列宽
fmt -一个简单的文本格式转换器
pr -让文本为打印做好准备
printf -格式化数据并打印出来
groff -一个文件格式化系统

1. nl 添加行号

nl程序是一个相当神秘的工具,用作一个简单的任务,它添加文件的行数,在它最简单的用途中,它相当于cat-n
[me@linuxbox ~]$ nl distros.txt | head
像cat,nl既能够接受多个文件作为命令行参数,也能接受标准输入,然而,nl有一个相当数量的选项并支持一个简单的标记方式去允许更多复杂的方式的计算。
nl在计算文件行数的时候,支持一个叫”逻辑页面“的概念,这允许nl在计算的 时候去重设(再一次开始)可数的序列。用到那些选项的时候,可以设置一个特殊的开始值,并且在某个可限定的程度上还能设置它的格式。一个逻辑页面被进一步分为header,body和footer这样的元素。在每一个部分中,数行数可以被重设,并且/或被设置成另外一个格式。如果nl同时处理多个文件,它会把它们当成一个单一的文本流。文本流中的部分被一些相当古怪的标记的存在加进了文本:

nl标记

标记 含义
\:\:\: 逻辑页页眉的开始处
\:\: 逻辑页主体开始处
\: 逻辑页页脚开始处

每一个上述的标记元素肯定在自己的行中独自出现,在处理完一个标记元素之后,nl把它从文本流中删除。

常用的nl选项

选项 含义
-b style 把body按被要求方式数行,可以是以下方式:a=数所有行,t=数非空行。这是默认设置。n=无。pregexp=只数那些匹配了正则表达式的行
-f style 将footer按被要求设置数。默认是无
-h style 将header按被要求设置数,默认是无
-i number 将页面增加量设置为数字,默认是1
-n format 设置数数的格式,格式可以是:ln=左偏,没有前导零。rn=右偏,没有前导零。rz=右偏,有前导零。
-p 不要在没一个逻辑页面的开始重设页面数
-s string 在没一个行的末尾加字符作为分割符号,默认是单个的tab
-v number 将每一行逻辑页面的第一行设置成数字,默认是1
-w width 将行数的宽度设置为width,默认是6

2. fold 限制文件行宽

折叠是将文本的行限制到特定的宽的过程,像我们的其他命令,fold接受一个或多个文件及标准输入。如果我们将一个简单的文本流送给fold:
[me@linuxbox ~]$ echo “The quick brown fox jumped over the lazy dog.” | fold -w 12
-s选项会让fold分解到最后可用的空白字符,即会考虑单词边界。

3. fmt 一个简单的文本格式器

fmt程序同样折叠文本,外加很多功能,它接受文本或标准输入并且在文本流上呈现照片转换。它主要是填充和连接文本行,同时保留空白符和缩进。
fmt -w 50 -p '# ’ fmt-code.txt
格式文件中的注释部分,相邻的注释行被合并,并且保留其余部分。

4. pr 格式化打印文本

pr程序用来把文本分页。当打印文本的时候,经常希望用几个空行在输出的页面的顶部或底部添加空白,此外,这些空行能够用来插入到每个页面的页眉或页脚。
[me@linuxbox ~]$ pr -l 15 -w 65 distros.txt
我们用-l选项(页长)和-w选项(页宽)定义了65列,长15行的一个”页面“。 pr 为 distros.txt 中的内容编订页码,用空行分开各页面,生成了包含文件修改时间、文件名、页码的默认页眉。

5. printf 格式化和打印数据

printf “format” arguments
比如:
printf “I formatted the string: %s\n” foo
I formatted the string: foo
格式字符串可能包含文字文本,转移序列和以%字符开头的序列,这被称为转换规范。在上面的例子中,转换规范%s用于格式化字符串“foo”并将其输出在命令行中。

组件 描述
d 将数字格式化为带符号的十进制整数
f 格式化并输出浮点数
o 将整数格式化为八进制
s 将字符串格式化
x 将整数格式化为十六进制数,必要时使用小写a-f
X 与x相同,但变为大写
% 打印%符号(比如,指定“%%”)

printf转换规范组件

组件 描述
flags 有5种不同的标志:# -使用“备用格式”输出。这取决于数据类型。对于o转换,输出以o为前缀。对于x和X转化,输出分别以0x或0X为前缀。0 -(零)用零填充输出。这意味着该字段将填充前导零。- -(破折号)左对齐输出。默认情况下,printf右对齐输出。’ ’ -(空格)在正数前空一格。+ -(加号)在正数前添加加号。默认情况下,printf只在负数前添加符号。
width 指定最小字段宽度的数
.precision 对于浮点数,指定小数点后的精度位数,对于字符串转换,指定要输出字符数。

printf主要用在脚本中,用于格式化表格数据,而不是直接用于命令行。但是我们仍然可以展示如何使用它来解决各种格式化问题。

文件格式化系统(Document Formatting Systems)

主要有两个文件格式化程序,nroff和troff,以及TEX排版系统。
nroff用于格式化文档以输出到使用等宽字体的设备,如字符终端和打字机式打印机。troff程序格式化用于排版机输出的文档,也就是‘camera-ready‘。roff家族还包括一些用于准备文档部分的程序,这些包括eqn(用于数字方程)和tbl(用于表)。
TEX系统在某种程度上取代了troff作为排版机输出的首选工具,由于其复杂性,以及在大多数现代Linux系统上默认情况下不安装的事实,我们不会在此讨论它。

groff

groff是一套用GUN实现troff的程序,它还包括一个脚本,用来模仿nroff和其他roff家族。

猜你喜欢

转载自blog.csdn.net/weixin_41811413/article/details/86599866
今日推荐