16.1.3 从档案文件中删除文件 0
1.1.1 head 1
第一篇 文件处理工具 1
1.1 head和tail 1
第一章 简单的文件处理工具 1
1.1.2 tail 2
1.2.1 more 3
1.2 more和pg 3
1.2.2 pg 8
1.3 cut和paste 11
1.3.1 cut 11
1.3.2 paste 14
1.4.1 split 15
1.4 split和csplit 15
1.4.2 csplit 16
1.5 od 18
1.6 join 20
1.7 习题 22
第二章 过滤程序与模式匹配工具 23
2.1 sort 23
2.2 comm 26
2.3 diff、diff3与cmp 28
2.3.1 diff 28
2.3.2 diff3 33
2.3.3 cmp 35
2.4 uniq 36
2.5 grep 38
2.5.1 grep 39
2.5.2 egrep 41
2.5.3 fgrep 42
2.6 习题 43
第三章 流编辑程序sed 45
3.1 起步 45
3.2 地址 46
3.3.1 面向整行的功能 47
3.3 功能 47
3.3.2 替换功能 48
3.3.3 输入输出功能 49
3.3.4 多输入行功能 49
3.3.5 保留功能与取回功能 50
3.3.6 控制流功能 50
3.4.1 普通命令 51
3.4 sed的用法示例 51
3.3.7 杂项功能 51
3.4.2 从文件中取sed命令 52
3.4.3 附加或插入新的行 53
3.4.4 把输出写至文件 54
3.4.5 在sed中使用正则表达式 55
3.5 习题 56
第四章 awk——数据加工和检索工具 57
4.1 引言 57
4.2 基础 57
4.2.1 awk程序的结构 57
4.2.2 用法 58
4.2.4 显示 59
4.2.3 字段 59
4.2.5 格式化后的显示 60
4.2.6 简单模式 61
4.2.7 简单动作 62
4.2.7.1 内部变量 62
4.2.7.2 用户定义的变量 62
4.2.7.3 函数 62
4.2.8 一组单行程序 63
4.2.9 出错信息 63
4.3.1 BEGIN和END 64
4.3 模式 64
4.3.2 关系表达式 65
4.3.3 正则表达式 66
4.3.4 模式组合 68
4.3.5 模式范围 68
4.4 动作 69
4.4.1 内部变量 69
4.4.2 算术运算 70
4.4.3 串和串函数 71
4.4.4 字段变量 74
4.4.5 数还是串? 75
4.4.6 控制流语句 76
4.4.7 数组 77
4.4.8 用户定义的函数 79
4.5.1 print语句 80
4.5.2 输出分隔符 80
4.5 输出 80
4.4.9 某些词法约定 80
4.5.3 printf语句 81
4.5.4 向文件输出 82
4.5.5 向管道输出 82
4.6.2 输入分隔符 83
4.6 输入 83
4.6.1 文件和管道 83
4.6.3 多行记录 84
4.6.4 getline函数 84
4.6.5 命令行实参 86
4.7 与其它命令及shell一起使用awk 86
4.7.1 system函数 87
4.7.2 与shell合作 87
4.8 实例应用 88
4.8.1 生成报告 88
4.8.2 其它例子 90
4.8.2.1 词频 90
4.8.2.2 总计 90
4.8.3 随机选择 91
4.8.4 shell设施 91
4.8.5 表格信件生成 91
4.9 习题 92
第二篇 程序开发工具 93
第五章 C程序检查工具 93
5.1 概述 94
5.3 检查语法错误 95
5.2 引用lint程序 95
5.4 检查未使用的变量和函数 97
5.5 检查局部变量 100
5.6 检查不可到达的语句 101
5.7 检查类型说明、引用与转换上的一致性 102
5.8 检查函数定义与使用的一致性 104
5.9 检查程序的可移植性 109
5.10 检查奇怪的结构 110
5.11 检查陈旧的C文法 112
5.12 检查指针对齐 113
5.13 检查表达式的求值顺序 114
5.14 检查与库函数的一致性 114
5.15 建立lint程序库 115
5.16 综合范例 117
5.17 lint命令选项和伪指令一览 121
5.18 习题 123
第六章 程序自动维护工具 124
6.1 概述 124
6.2 依赖关系 124
6.3 建立Makefile文件 126
6.4 使用make 127
6.4.1 使用没有实参的make 128
6.4.2 make指定的目标 129
6.4.3 使用指定的makefile文件 129
6.4.4 make的选项 130
6.4.5 内部伪目标名 131
6.5 make的宏 132
6.5.1 使用宏 132
6.5.2 make的内部宏 134
6.5.3 使用shell环境变量 135
6.6 内部规则 136
6.6.1 使用内部规则 136
6.6.2 修改内部规则 145
6.6.3 自定义新的内部规则 146
6.7 使用与维护档案库 148
6.8.1 make与shell 151
6.8 使用make的高级课题 151
6.8.2 出错处理 153
6.8.3 make的嵌套使用 155
6.9 综合范例 156
6.10 习题 158
第七章 源码控制系统 159
7.1 概述 159
7.2 基础知识 160
7.2.1 文件和目录 160
7.2.2 delta和SID 161
7.2.3 SCCS工作文件 162
7.3 建立和使用s-文件 163
7.3.1 建立s-文件 163
7.2.4 文件管理员 163
7.3.2 为读而复原文件 164
7.3.3 编辑和修改SCCS文件 165
7.3.4 使用多个版本 166
7.3.5 比较版本之间的差异 170
7.3.6 简化版本结构 170
7.3.7 显示s-文件 171
7.3.8 显示delta版本的信息 174
7.3.9 包含与排除delta 175
7.4 使用标识关键字 176
7.5 使用s-文件标志 179
7.6 修改s-文件信息 180
7.6.1 加入注释 181
7.6.2 修改注释 181
7.7 保护和修复s-文件 182
7.7.1 保护s-文件 182
7.7.2 检查s-文件 183
7.7.3 修复SCCS文件 183
7.8 同时编辑一个s-文件 184
7.9 SCCS的求助功能 185
7.10 make与SCCS 186
7.11 习题 187
第八章 直方图工具 188
8.1 概述 188
8.2 怎样使用直方图工具 189
8.3 使用prof命令 190
8.4 用环境变量控制程序的运行 192
8.4.1 PROFOPTS环境变量 192
8.4.2 使用PROFOPTS 192
8.5 使用lprof命令 194
8.5.1 搜索源文件 195
8.5.2 lprof的输出 195
8.5.3 突出不执行的行 196
8.5.4 总结报告 198
8.5.5 合并统计数据 198
8.6 对库函数进行直方图处理 199
8.7 改善测试的覆盖面 200
8.7.1 检查未列入文档的选项 201
8.7.2 检查永远不被调用的函数 201
8.7.3 检查难于形成的出错条件 202
8.8 综合范例 202
8.9 习题 208
第三篇 语言开发工具 209
第九章 词法分析程序的生成程序 210
9.1 概述 210
9.2 引用lex 211
9.3 正则表达式 212
9.4 lex的源 214
9.5 处理二义性规则 217
9.6 lex动作 218
9.7 lex应用 221
9.8 习题 225
第十章 编译程序的编译程序 227
10.1 概述 227
10.2 基本规范说明 229
10.2.1 动作 231
10.2.2 词法分析 233
10.3 文法分析程序的工作过程 235
10.4 二义性和冲突 238
10.5 优先级 241
10.6 准备规范说明 243
10.6.1 输入风格 243
10.6.2 左递归 244
10.6.3 词法上的注记 244
10.6.4 处理保留字 245
10.7 yacc环境 245
10.8 两个例子 246
10.8.1 一个简单的例子 246
10.8.2 一个高级的例子 249
10.9 习题 257
第十一章 m4——宏处理程序 258
11.1 概述 258
11.2 引用m4 259
11.3 m4宏处理 260
11.3.1 定义宏功能 260
11.3.2 加引号 261
11.3.3 自变量 262
11.3.4 内部算术运算功能 264
11.3.5 文件管理 265
11.3.6 输出转换 265
11.3.7 系统命令 265
11.3.8 条件 265
11.3.9 字符串操作 266
11.3.10 打印 267
11.4 内部功能一览表 267
11.5 习题 268
第四篇 调试工具 269
第十二章 目标程序调试工具 269
12.1 概述 269
12.2 启动和停止adb 270
12.3 显示指令和数据 271
12.3.1 形成地址 271
12.3.2 形成表达式 272
12.3.3 选择数据格式 273
12.3.4 使用(?)和(/)命令文件 273
12.4 调试程序执行 275
12.4.1 调试命令汇总 275
12.4.2 一个例子:跟踪多个函数 276
12.5 使用adb内存映像 280
12.5.1 显示内存映像 280
12.5.2 改变内存映像和建立新的映像项 281
12.6.1 建立adb命令文件 281
12.6.2 设置默认的输入格式 281
12.6 其它特点 281
12.6.3 使用UNIX命令 282
12.6.4 计算数值 282
12.7 修补二进制文件 282
12.8 习题 283
第十三章 符号调试程序 284
13.1 概述 284
13.2 引用sdb 285
13.3.1 显示堆栈的跟踪数据 287
13.3 交互式命令 287
13.3.2 处理变量的命令 288
13.3.3 源文件显示及处理 291
13.3.4 调试一个活动的进程 292
13.4 sdb的其它特性 298
13.5 习题 298
第十四章 其它调试方法 299
14.1 概述 299
14.2 利用C预处理程序调试 299
14.3 ctrace 301
14.4 习题 304
第五篇 其它工具 305
第十五章 计算器工具 305
15.1 概述 305
15.2 dc:一个交互式的台式计算器 305
15.2.1 启动和退出 305
15.2.2 dc栈操作命令 306
15.2.3 详细描述 307
15.3 bc:一个任意精度的台式计算器 308
15.3.1 启动和退出 308
15.3.2 整数的简单运算 309
15.3.3 特殊内部量 310
15.3.4 函数 312
15.4 习题 314
第十六章 文件归档工具 315
16.1 建立和维护档案文件 315
16.1.1 向档案文件中增加文件 315
16.1.2 列出档案中的文件名 316
16.1.5 在C编译程序中使用档案库 317
16.1.4 显示或抽取档案中的文件 317
16.1.6 ar的选项 318
16.2 文件存档 319
16.2.1 建立一个新的档案 319
16.2.2 建立多卷档案 320
16.2.3 列出档案中的文件名 320
16.2.4 从档案中抽取文件 321
16.2.5 向档案中增加文件 322
16.2.6 tar的选项 322
16.3.1 建立cpio文件 324
16.3 文件档案的输入和输出 324
16.3.2 从cpio档案中抽取文件 325
16.3.3 在目录间复制文件 326
16.3.4 cpio的选项 326
16.4 习题 327
参考文献 328
A.2 模式 329
A.4 输入一输出 329
A.3 控制流语句 329
A.1 命令行 329
附录A awk语法小结 329
A.5 函数 330
A.6 串函数 330
A.7 数值函数 330
A.8 算符(优先级、递增) 330
A.9 正则表达式(优先级递增) 331
A.10 内部变量 331
A.11 限制 332
A.12 初始化、比较和类型强制 332