IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux  >

技巧: 了解文本实用程序

关于 Linux 上自动化的文本处理的一系列技巧的简介

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Jacek Artymiak (jacek@artymiak.com), 自由顾问、开发人员和作家

2002 年 10 月 09 日

GNU 文本实用程序包(包括用于 Microsoft Windows 的 Cygwin 和用于 Mac OS X 的 Fink)是一个功能强大且灵活的工具集,它可以在 Linux 和所有其它 UNIX 及类 UNIX的操作系统下进行自动化的文本处理。这一系列的介绍性技巧文章为 Linux 用户简要介绍了 GNU文本处理工具 — 如何使用它们、如何避免缺陷以及如何将它们组合在一起形成功能强大的定制的工具。

许多用户都试图在他们所喜欢的文本编辑器中避免用自动化的文本处理,或者只是用“查找并替换”这种算不上真正意义上的自动化的文本处理。原因有多方面:缺乏对可用工具的了解;或者,在许多情况下,害怕使用正则表达式,而这是学会使用 sed、AWK 或 Perl 所需要的。

虽然这些工具确实在自动化文本处理方面大有帮助,但不是所有任务都需要类似于这样的重量级“武器”:可以使用 GNU textutils 分发版中的工具集来解决许多问题。十多年来这些便利的文本处理程序一直存在于许多免费的和商业性的 Unix 上,但仍然有许多用户不太了解它们。

这个系列的技巧文章向您介绍,通过使用这些标准的 GNU 文本实用程序,您可以体会到软件的价值以及方便地控制数据流。读完本文,您将能够使用这些文本处理实用程序、管道和流来构建复杂的数据处理系统。还将能够编写简单的一次性的脚本,使一些常见的系统管理例行事务自动化,执行快速格式化作业或者做其它简单但又常见的任务,这些都属于“自动化的文本处理”。

在命令行下使用:输入和输出,管道和流

在开始之前,应该掌握一些在命令行下工作的基本知识。不过,这里仅是概述 — 如果您都明白这些,那棒极了!其他人可能想浏览列在本文末尾的附加参考资料。

开发人员编写用于处理文本数据的程序时要涉及到选择两个一般的源和目标:文件和流(为了简化本文,我们将不考虑套接字)。

读取数据流并将结果写入流是很方便的,因为应用程序不一定要将文件的大部分(更不必说整个文件)读取到内存。足够容纳一行文本(在大多数情况下,长度只有几百个字节)的小缓冲区通常可满足要求了,它甚至可以处理占有几百兆字节存储器空间的文本文件。对于文本处理,这种方法的另一个好处是可以将字符串命令组合在一起放入管道,将来自一个命令的标准输出流的数据传递到另一个标准输入流。这一简单技术让任何人用简单的构件就可以构造出复杂的数据处理系统。

在所有 UNIX shell 中,从某个流中读取数据以及创建管道的语法都类似(尽管作者使用 bash 语法 — GNU Bourne-Again SHell,但本文中的示例不经修改就可移植到其它环境中)。

每个应用程序可以有许多输出流,但我们最感兴趣的是标准输出(STDOUT),几乎所有 UNIX 命令(包括 textutils 包中的命令)都将结果写到标准输出,除非另行指示。STDOUT 通常是控制台,除非用户进行了重定向。类似的,这些命令所处理的数据源通常是标准输入(STDIN),通过它可以接收来自其它命令的 STDOUT、文件或键盘的数据。这个机制十分便利,不会造成系统资源紧张。

在 UNIX 环境中使用流是如此自然以至于大多数时间您甚至没有意识到自己在这么做。例如,当用 ls 时,它会读取指定目录的内容,并将文件列表发送给调用它的程序(shell)的标准输入。

如果 ls 是由另一个程序(如脚本)调用,则它的输出将送到该程序,并且,如果需要的话,可能会做进一步的处理。但不需要写一个脚本。您可以用 | 管道将来自一个命令的输出送到另一个命令。正如您将看到的,在本系列的后续文章中,我们将大量地使用这个特性。





回页首


总结

通过本系列文章,我们将了解 cat 和 tac;head 和 tail;sort 和 uniq — 还将讨论转储、建立文件夹、分割、建立索引和其它一些最常用的 UNIX 和 Linux 文本实用程序的功能。在您的计算机上有一些最实用的代码;哎,但常常很少使用它们 — 也许是由于手册页难以理解,如果您已经不知道您自己正在做什么。这就是为什么本系列文章不是一个仅照搬手册页选项的文章,而是用一些案例来指导您正确使用常见的一些命令的指引,这样您就会有一种上机实践的感觉,知道如何以及何时使用它们。一旦掌握了这些基础知识后,您会发现(通常是不可思议)手册页是非常容易理解的。

最后,我邀请您加入到我这里,我希望本系列文章将有助于您从自己的计算机中获益最大。



参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 标准的文本实用程序参考资料是 GNU 文本实用程序手册(还有 相同 TOC 的扩展视图)。这本手册是由麻省理工学院编写并维护的,它的镜像已经遍布整个 Web(也许您已经将它安装到了自己的机器上)。



  • 在这个领域, UNIX Power Tools(Jerry Peek、Tim O'Reilly 和 Mike Loukides 著,O'Reilly and Associates,1997,ISBN 1-56592-260-3)是一本经典的著作。



  • Windows 用户可以在 Cygwin包中找到这些工具。



  • Mac OS X 用户可能想试一下 Fink,它是在新 Mac OS X 下安装一个丰富的 UNIX 环境。



  • 刚开始使用 Linux?或者决定在其它平台(如 Windows 或 Mac)上尝试这些实用程序?如果是这样,您可能希望回顾这篇真正是介绍性的文章 UNIXhelp for users



  • 对于 Linux 或 UNIX 的新用户,还有一份极好的参考资料 — Jargon 文件(有人称之为 新黑客的字典)。可以在 Eric Raymond 的 tuxedo.org 站点 在线阅读它



  • developerWorks的 Linux 专区,查找 更多有关 Linux 的文章


关于作者

Jacek Artymiak 是一位自由顾问、开发人员和作家。自从 1991 年他就一直为许多商业性和免费的 UNIX 和 BSD 操作系统的变体(AIX、HP-UX、IRIX、Solaris、Linux、FreeBSD、NetBSD、OpenBSD 和其它操作系统)和 MS-DOS、Microsoft Windows、Mac OS 与 Mac OS X 等开发软件。Jacek 擅长商业和金融应用程序开发、Web 设计、网络安全、计算机图形、动画和多媒体。在技术主题方面,他是一位多产的作家,并与他人一同合著了“Install, Configure, and Customize Slackware Linux”(Prima Tech,2000)和“StarOffice for Linux Bible”(IDG Books,2000)。在 SourceForge 上可以找到许多 Jacek 的软件项目。可以从他的 个人网站更多地了解他,可以通过 jacek@artymiak.com与他联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款