Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712889
  • 博文数量: 112
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 16:46
文章分类

全部博文(112)

文章存档

2009年(4)

2008年(108)

我的朋友

分类: LINUX

2008-12-03 21:41:34

 Jacek Artymiak (), 自由顾问、开发人员和作家

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 文本实用程序的功能。在您的计算机上有一些最实用的代码;哎,但常常很少使用它们 — 也许是由于手册页难以理解,如果您已经不知道您自己正在做什么。这就是为什么本系列文章不是一个仅照搬手册页选项的文章,而是用一些案例来指导您正确使用 常见的一些命令的指引,这样您就会有一种上机实践的感觉,知道如何以及何时使用它们。一旦掌握了这些基础知识后,您会发现(通常是不可思议)手册页是非常 容易理解的。

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


阅读(1758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~