第二十一章 格式化输出

article/2025/6/22 13:47:31

第二十一章 格式化输出

本章仍然是文本相关的工具,重点放在格式文本输出而非更改文本本身的程序上。

命令如下:

  • nl:对行进行编号。
  • fold:在制定长度处折行。
  • fmt:一个简单的文本格式化工具。
  • pr:格式化要输出的文本。
  • printf:格式化并输出数据。
  • groff:文档格式化系统。

简单的格式化工具

这些工具大多是单一用途的程序,其工作方式并不复杂,但是可以用于小型任务或作为管道和脚本的一部分。

nl-对行进行编号

nl命令任务非常简单,对行进行编号,其格式如下:

nl filename #显示文件名为filename的文件的内容,并显示其行号

nl可以接受多个文件参数或标准输入。但是nl具有很多选项,支持原始形式的标记,能够实现更为复杂的编号。

nl支持一个叫作“逻辑页”(logical pages)的特性,这使其在进行编号时能够重置数值序列。逻辑页被划分为页眉、正文及页脚。文本流中的各个部分由文本中所加入的一些标记来指示。

nl标记

标记含义
\:\:\:逻辑页页眉的开始
\:\:逻辑页正文的开始
\:逻辑页页脚的开始

所示的每个标记都必须出现在单独一行中。处理完标记后,nl会将其从文件流删除。

常用的nl选项

选项含义
-b sytle将正文编号设置为style,其中的style可以是下列取值之一: a表示编号所有行;t表示仅编号非空行,这是默认项;n表示不编号;pregexp表示仅编号BRE regexp的行
-f style将页脚设置为style。默认值为n(无)
-h style将页眉编号设置为style。默认值为n(无)
-i number将页面编号增量设置为number,默认值为1
-n format将页面编号格式设置为format,其中的format可以是下列取值之一:ln表示左对齐,不进行0填充(without leading zeros);rn表示右对齐,不进行0填充,这是默认值;rz表示右对齐,进行0填充
-p不在每个逻辑页开头处重叠页面编号
-s string在每行行号之后添加string作为分隔符。默认值是单个制表符
-v number将每个逻辑页中第一行的编号设置为number。默认值1
-w width将行号字段的宽度设置为width。默认值是6

例如使用nl查看foo.txt文件:

foo.txt文件内容如下:


aaa
bbb
ccc



查看命令如下:
nl foo.txt

输出结果如下:

1 aaa
2 bbb
3 ccc


fold-在指定长度处折行

折行是将文本行在制定宽度处断开的过程。fold可以接受一个或多个文件参数,也可以接受标准输入。

例如:向fold发送一个简单的文本流

echo "The quick brown fox jumped over the lazy dog." | fold -w 12

命令输出结果如下:


The quick br
own fox jump
ed over the
lazy dog.



echo 命令输出结果的文本被按照-w选项指定的值拆成了多个片段,在本例中,将行宽制定为12个字符。若未指定行宽,则默认为80个字符。

fmt-一个简单的文本格式化工具

fmt命令也可以将文本折行,除此之外,该命令可以接受文件参数或标准输入,对文本流执行段落格式化操作。

fmt常用格式如下:

fmt [options] filename #将文件名为filename的文件的内容格式化输出到标准输出command | fmt [options] #将command命令的输出结果通过管道交给fmt进行格式化输出。

例如:

fmt选项

选项描述
-c在冠边距(crown margin)模式下操作。该模式保留段落前两行缩进、后续第二行的缩进
-p string仅格式化已string开头的行。经过格式化之后,string被作为重新格式化后的各行的开头。该选项可用于格式化源代码注释中的文本。
-s纯分隔(split only)模式。在此模式中,仅分隔行以适应指定列宽,不会连接短行进行填充。在格式化不适合连接的文本时,该选项就能派上用场
-u均匀间隔(uniform spacing)。对文本应用传统的“打字机样式”(typewriter style)格式。
-w width格式化文本以适应width个字符的列宽,默认值是75个字符。注意,为了实现平衡(line balancing),fmt实际格式化的行长度会比指定的列宽稍微小一点

例如将fmt的info页以50字符列宽显示:

命令如下:

info fmt | fmt -w 50

输出结果如下图:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

pr-格式化要输出的文本

pr命令用于对文本进行分页。在输出文本时,通常会用几行空白分隔符输出页面,以便为各项提供上边距和下边距。

例如将distros.txt文件格式化为一系列小号页面:

pr -l 15 -w 65 distros.txt

输出结果如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本例中,制定了-l选项(页面长度)和-w选项(页面宽度),将页面定义为15行、宽65列。

printf-格式化并输出数据

printf命令不适用于管道(不接受标准输入),多用于脚本。

printf(打印格式,print formatted的缩写)是bash的内建命令。

用法如下:

printf "format" arguments

该命令指定一个包含格式描述的字符串,这个字符串会被应用于参数列表。格式化后的结果输出至标准输出。

例如:

printf "I formatted the string: %s\n" foo

输出结果如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

格式化字符串可以包含普通文本(如I formatted the string:),转义序列(如\n)以及称为“转换说明”(conversion specifications)的以%开头的序列。

常用的printf数据类型说明符

说明符描述
d将数字格式化为有符号十进制整数
f格式化并输出浮点数
o将整数格式化为八进制数
s格式化字符串
x将整数格式化为十六进制数,根据需要使用小写字母a~f
X和x功能一样,只不过使用的是大写字母A~F
%输出普通的%(指定%%)

使用字符串380演示各种说明效果:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说明符还可以添加一些可选组件以调整输出。一个完整的转换说明包括:


%[flags][width][.precision]conversion_specification


printf转换说明的组件

组件描述
flags共有如下5种不同的标志。#: 使用替代格式输出。替代格式取决于数据类型。对于o(八进制)转换,输出结果加上前缀0.对于x和X(十六进制)转换,输出结果分别加上前缀0x和0X;0(数字0):使用0填充输出结果。这意味着会在字段前添加0,例如000380;-(连字符):左对齐输出。默认情况下,printf右对齐输出;‘’(空格符):为正数生成一个前导空格符;+(加号):正数符号。默认情况下,printf只输出负数的符号
width一个指定字段最小宽度的数字
.precision对于浮点数,指定了小数点后输出的精度位数。对于字符串转换,指定了输出字符个数

printf转换说明示例

参数格式结果说明
380“%d”380简单的整数格式化
380“%#x”0x17c使用“替代格式”标志将整数格式化为十六进制数
380“%05.5f”380.00000将数字格式化为精确到小数点后5位的浮点数,位数不足用0填充。由于指定的字段最小宽度(5)少于格式化后实际宽度,因此此处并未进行填充
380“%010.5f”将字段最小宽度增至10,现在就能看到填充效果了
380“%+d”+380+标志表示为正数
380“%-d”380-标志表示左对齐
abcdefghijk“%5s”abcedfghijk以字段最小宽度格式化字符串
abcdefghijk“%.5s”abcde
对字符串设置精度,导致其被截断

文档格式化

文档格式化领域内主要有两大派系:一派源自最初的roff程序,其中包括nroff和troff;另一派则基于TEX排版系统。

roff程序用于格式化要输出到使用等宽字体设备上的文档,例如字符终端和打字机式打印机。它支持几乎所有与计算机相连的打印设备。roff派系还包含了一些用于处理文档部分内容的程序,其中包括eqn(针对数学方程式)和tbl(针对表格)

groff

groff是包含troff的GNU实现在内的一组程序,另外还包括用于仿真nroff和roff派系其他功能的脚本。

如今多数文档都是用文字处理器生成的,文字处理器只用一步就能完成文档的编写和布局。在图形化文字处理器问世之前,生成文档通常包括两个步骤:使用文本编辑器编写内容,使用troff这类处理工具进行格式化。格式化工具的命令都已经通过标记语言嵌入所编写的文本中。

groff因为其标记语言的很多元素处理都是一些相当晦涩的排版细节。但其广泛应用的是宏软件包(macro package)。这些宏软件包将多个低阶命令汇聚成少量的高阶命令集,从而大大简化了groff的使用。


http://www.hkcw.cn/article/qPNdiAAyIP.shtml

相关文章

印度一婚礼现场爆发斗殴 双方亲戚因换座要求大打出手

印度一婚礼现场爆发斗殴,双方亲戚因换座要求大打出手,女性也参与其中,椅子餐具齐飞。责任编辑:zx0002

女生包迷你小粽子和室友一起吃 口味自选白糖或老干妈

文理女生包迷你小粽子投喂室友,手捧随便抓,口味自选白糖或老干妈。责任编辑:zx0002

【笔记】在 Clang 工具链中降级 NumPy 到 2.2.4

📝 在 Clang 工具链中降级 NumPy 到 2.2.4 ✅ 目标说明 在 MSYS2 的 Clang 工具链环境中,将 NumPy 从 2.2.6 成功降级到 2.2.4。 🧰 环境信息 项目内容操作系统Windows 11MSYS2 终端类型Clang64(需手动启动)Python 路…

基于STM32控制直流电机加减速正反转设计

基于STM32控制直流电机 (仿真+程序+设计报告) 功能介绍 具体功能: 1.L298N电机驱动; 2.按键可以控制正/反转,加/减速,停止; 3.LCD1602显示转速等级和正反转&#xff…

性能优化 - 案例篇:大对象的优化

文章目录 Pre1. 引言2. String 的 substring 方法内存泄漏案例2.1 JDK6 的实现与内存泄漏2.2 JDK7 的修复2.3 优化启示 3. 集合扩容的隐形成本3.1 StringBuilder 扩容机制3.2 ArrayList 扩容机制3.3 HashMap 扩容机制3.4 优化建议 4. 结构维度:优化大对象的粒度与存…

尹锡悦夫妇公开露面参加大选投票 完成投票未回应提问

韩国第21届总统选举于当地时间3日上午6时正式开始投票。据韩联社报道,当天上午,韩国前总统尹锡悦与夫人金建希在安保人员陪同下前往首尔瑞草区的一处投票站完成投票。投票结束后,面对记者关于“何时接受检方调查”、“如何看待因弹劾引发的提前大选”以及“为何拒绝配合调查…

专家:国际调解院不是和西方打擂台 60国代表齐聚香港

国际调解院不是和西方打擂台 60国代表齐聚香港!调解不再看西方脸色,60国代表齐聚香港。2025年,中国主导设立的“国际调解院”正式挂牌成立,总部设在香港的旧湾仔警署。来自亚洲、非洲、中东等60个国家的代表共同见证这一历史性时刻。印尼外长表示:“终于不用再花冤枉钱看欧…

中纪委发布5月反腐月报 97人被查41人被处分

6月2日下午,中纪委网站发布《反腐月报》显示,5月共有97人被查,41人被处分。在被查的97人中,包括7名中管干部。这些中管干部分别为:十四届全国政协常委、经济委员会副主任毕井泉,国家国防科技工业局原党组成员、副局长张建华,陕西省政协副主席刘宽忍,四川省政府党组成员…

易烊千玺《酱园弄》光头造型 角色海报引热议

6月3日,《酱园弄》官方宣布该片第一部将于6月21日上映。预告片中,章子怡饰演的詹周氏身着破碎染血旗袍提包走过弄堂,周围的人们神情各异,雷佳音饰演的薛至武在她即将走出弄堂时伸手阻拦,詹周氏的命运充满未知。海报上,詹周氏站在中心,众人围绕在她周围,底部露出的报纸文…

韩国大选 尹锡悦夫妇完成投票

韩国第21届总统选举于当地时间3日上午6时正式开始投票。据韩联社报道,韩国前总统尹锡悦与夫人金建希当天上午在安保人员陪同下前往首尔瑞草区的一处投票站完成投票。投票结束后,面对记者关于“何时接受检方调查”“如何看待因弹劾引发的提前大选”“为何拒绝配合调查”等问题…

妈妈给萌娃哭声配音看笑网友:好贴心,还给孩子留了气口..

孩子妈:自从学会了配音,再也不担心孩子哭了,网友:好贴心,还给孩子留了气口...责任编辑:zx0002

媒体:别让装备竞赛绑架青少年 碳板鞋风靡校园引忧虑

近段时间,碳板鞋开始风靡校园,成为学生们的“新宠”。这类鞋子外观炫酷、科技感十足,但其流行背后隐藏着不少问题。碳板鞋最初设计是为了提高精英运动员的运动水平,但在校园里却成了学生们展示个性和时尚的方式,甚至形成了鄙视链,国际品牌高于国产品牌高于杂牌,普通运动…

cpper 转 Golang

推荐视频 8小时转职Golang工程师(如果你想低成本学习Go语言) 文章目录 与C对比Go语言基本语法特殊类型与占位符:defer数组 slice切片map[string]stringstruct 结构体继承interface 多态 机制调度器GPM:M:N 调度器(多对多调度器) runtime全局G…

Linux如何区分普通进程和实时进程

在 Linux 中,区分普通进程(Normal Process)和实时进程(Real-Time Process)主要通过以下两个核心机制实现: 1. 调度策略(Scheduling Policy) Linux 使用 调度策略明确标识进程类型&a…

学院校园网三层架构详解配置实战:从拓扑到策略全解析

目录 一、项目背景与网络拓扑 1.1 网络架构概述 1.2 物理拓扑结构 二、IP地址规划与VLAN划分 2.1 IP地址分配表 2.2 VLAN规划策略 三、设备配置详解 3.1 出口路由器R1配置 3.1.1 基础配置 3.1.2 路由配置 3.1.3 NAT配置 3.1.4 R2配置 3.2 核心交换机S1配置 3.2.…

长期喝桶装水或面临健康风险 微塑料隐患需警惕

在日常生活中,有人习惯于长期自己烧水喝,也有一部分人对自来水的水质问题担忧,选择桶装水或瓶装水。那么,长期自己烧水喝的人和经常买桶装水喝的人,到底谁更健康?2024年1月,国际学术期刊《美国国家科学院院刊》发表了一项最新研究发现:每升瓶/桶装水中平均约含有24万个…

《酱园弄》第一部群星海报来啦!

《酱园弄》第一部群星海报来啦!真相无踪、命数未定,海报更是信息量满满,好了这下暑假有电影看了。责任编辑:zx0002

多人殴打未成年人被抓获 最小15岁 7人全部落网

多人殴打未成年人被抓获 最小15岁 7人全部落网!6月2日,四川古蔺警方通报了一起在地下停车场发生的多人殴打未成年人事件。警方成功抓获了7名涉案人员,其中年龄最大的26岁,最小的15岁。目前,已有2人被刑事拘留,另外5人受到行政处罚。责任编辑:0882

水果夹酸奶风靡长沙 成餐饮新宠

水果夹酸奶风靡长沙 成餐饮新宠。继“干噎酸奶”风靡网络后,“水果夹酸奶”成为近期的热门甜品。新鲜的草莓、菠萝蜜、苹果、葡萄甚至是荔枝和蓝莓切开,加入适量酸奶,吸引了许多消费者前来品尝。在长沙,数十家酸奶、甜品店纷纷推出这款新品,一些湘菜馆和料理店也特意增加了…

汽车行业的价格战该“刹车”了 无序竞争损害行业健康发展

“618”限时促销活动中,部分国内车企大幅降价,最高直降5.3万元。这轮价格战始于5月23日,一家车企因市场中涌入更多有竞争力的对手,以及冲销量的考虑,率先发起大规模降价活动。随后多家车企纷纷效仿,市场上出现了连锁反应。根据公开信息,超过半数的主流车企发布了不同程度…