网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > linux > 其它unix > 使用 UNIX 进行文本处理  

使用 UNIX 进行文本处理

2006-09-11  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

UNIX® 起源于简单的文本处理,并且在它的命令行环境中保留了功能最强大的文本处理工具之一。通过将一系列简单的命令组合在一起,可以完成复杂的文本转换,UNIX 提供的工具允许您构建几乎任何所需的文本处理引擎。

引言 中国网管论坛bbs.bitsCN.com

    在 UNIX® 诞生之初,人们不大熟悉这种新的操作系统,但他们很快找到了适当的切入点,大学中的研究人员需要一种像样的文本处理环境。因为在那个时候,计算机的处理速度和内存容量有限,所以程序必须很小,并且相对比较简单。这样就产生了 UNIX 中著名的设计思想:“一组工具协同工作,以便完成一项任务”。通过 UNIX 管道将几种很小的、但功能强大的文本处理工具组合在一起,可以对文本进行各种方式的转换和操作。

网管联盟bitsCN@com

    在本文中,您将简要了解从文件和程序中获得文本、使用 tr 命令对其进行简单的转换、使用 sed 命令进行复杂的搜索和替换操作。然后,您将使用 Perl 编程和脚本语言再次完成这些操作,这样一来您就可以认识到,Perl 的功能非常强大,它可以替代 tr 和 sed 命令。 中国网管联盟bitsCN.com

开始之前

网管网www.bitscn.com

   如果您希望按照本文中的示例进行实验,请确保您可以使用 UNIX 命令行环境。这可能是本地计算机中的终端模拟程序(在现代桌面中通常称为 终端,如果您习惯使用 Windows®,那么可以使用 Cygwin)、或通过 SSH 访问的远程系统。

网管联盟bitsCN_com

   本文的示例所使用的 Shell 语法适用于 GNU Bash,有关需要使用的特定语法,请参考您的 Shell 手册(或者可以考虑使用 Bash)。

网管论坛bbs_bitsCN_com

对文本进行各种操作 中国网管联盟bitsCN.com

    在开始使用 UNIX 的各种文本实用程序操作文本之前,需要了解如何获得文本。并且在进行这项工作之前,需要了解 UNIX 的标准输入/输出 (I/O) 流。 网管u家u.bitsCN.com

    标准 C 库(因而,每个 UNIX 程序)定义了三种标准流:输入、输出和错误。有时将它们称为 stdin、stdout 和 stderr,这是在所有 C 程序中用来表示它们的全局变量。 网管下载dl.bitscn.com

    当您在 Shell 中使用 > 操作符将程序输出重定向到文件时,就可以将它的标准输出 (stdout) 流发送到这个文件。例如:ls > this-dir 将 ls 的输出发送到一个名为 this-dir 的文件。 网管下载dl.bitscn.com

    当您在 Shell 中使用 < 操作符将程序输入重定向到文件时,就可以将该文件中的内容输入到该程序的标准输入 (stdin) 流。例如:sort < this-dir 可以从名为 this-dir 的文件中读取内容,并将其作为 sort 命令的输入。

网管u家u.bitscn@com

    另一个常用于重定向标准流的操作符是“|”(管道)操作符,它可以将左侧程序的标准输出流连接到右侧程序的标准输入流。例如:ls | sort 和前面的两个示例完成相同的任务,并且无需临时文件,ls 的输出直接进入 sort 命令。 网管网www.bitscn.com

    如果您仔细观察,那么可能会发现,前面的这些示例中并没有出现标准错误 (stderr) 流。与标准输出流一样,可以对 stderr 进行重定向或使用管道进行传输,但是您需要告诉 Shell 您希望处理 stderr 而不是 stdout。 网管网www.bitscn.com

    可以使用 2> 操作符将标准错误流重定向到文件。在处理生成有用的错误输出的命令时,您经常会看到这个操作符,比如用于编译 UNIX 程序的 make 工具:make 2> build-errors。

中国网管论坛bbs.bitsCN.com

    这个命令运行了 make,并将任何错误信息发送到 build-errors 文件。与之类似,您可以使用 2| 将 stderr 通过管道传递到另一个程序。 网管联盟bitsCN@com

    如果您对具体的细节感兴趣,那么其他的流也有与之对应的数字,尽管很少使用到它们(0 表示标准输入,1 表示标准输出),除了在一个非常常见的操作符中。在清单 1 所示的示例中,2>&1 操作符将标准错误流连接 到标准输出流。与 > 操作符组合在一起,您可以使 stderr 和 stdout 输出到相同的文件中。

网管论坛bbs_bitsCN_com


清单 1. 将标准错误流连接到标准输出流
make > build-output 2>&1

       
网管联盟bitsCN@com

命令 网管bitscn_com

有两个常用来生成文本输出的标准 UNIX 命令:cat 和 echo。 网管联盟bitsCN_com

    cat 命令读取参数中指定的每个文件,并将这些文件的内容写入到 stdout。echo 命令将其参数写入到 stdout。您常常会发现它们作为更复杂的命令管道中的一部分(请参见清单 2)。 网管论坛bbs_bitsCN_com


清单 2. 使用 cat 和 echo
cat file1 file2 ... filen

echo arguments...

       
中国网管联盟bitsCN.com

    但如果您只需要文件中开头的部分或结尾的部分,那又应该如何呢?cat 有两种可用来完成这种任务的变种,称为 head 和 tail(请参见清单 3),它们分别可以显示开头的或结尾的 10 行内容,您可以使用 -n 选项为它们指定不同的行数。
清单 3. 使用 head 和 tail
head file1 file2 ... filen

tail file1 file2 ... filen

       网管bitscn_com 

    tail 命令还有一个有用的选项 -f (follow)。该选项告诉 tail 打印指定文件的最后 10 行,但是它不仅打印已有的内容,还会等待该文件中将要出现的更多内容,并对其进行打印。您可以使用该选项接着 显示错误日志中的输出,例如,要在将错误写入到日志的同时查看这些错误。

网管下载dl.bitscn.com

  网管网www_bitscn_com

网管u家u.bitscn@com


TAGs   处理   文本   进行   使用   字符   可以   清单   命令   一个   匹配      
 上一篇:嵌入式Linux: uClinux操作系统移植   下一篇:媲美Windows Ubuntu 10大应用程序
使用 UNIX 进行文本处理 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: