使用UNIX进行文本处理

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

引言

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

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

开始之前

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

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

对文本进行各种操作

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

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

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

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

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

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

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

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

时间: 2025-01-30 09:04:10

使用UNIX进行文本处理的相关文章

使用 Linux/Unix 进行文本处理

v 使用 Linux/Unix 进行文本处理 正则表达式 翻译领域不乏让人摸不着头脑的词汇,比如"句柄"."套接字"."鲁棒性".当然,"正则表达式"也属于这一类词汇.我刚接触正则表达式的时候,对这个名词感到非常迷惑.深入了解之后,才突然明白,原来所谓的 regular expression, 其实就是"有规律.有模式的字符串"而已. 很少有一门技术,只需要投入少量的学习成本即可获得巨大的价值回报.正则表达

Unix和Linux下C语言学习指南

尽管 C 语言问世已近 30 年,但它的魅力仍未减退.C 语言继续吸引着众多的开发者,他们为了编写.移植或维护应用程序而必须学习新技能. 本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的.希望对您的学习和工作有所帮助.您也许不赞同其中的某些方法,但我们希望您会喜欢其中的一些. 本文不介绍作为一个程序员应掌握得语言细节,而是与初学者分享自己的UNIX 下C语言编程学习经验;也不说明一个合格的编程人员应该掌握的计算机知识,比如:操作系统.数据结构与算法.数据库等等. 不管您出

《Unix编程艺术》重读笔记(三)

题外:从老家从早到晚总算折腾回了杭州,进站太早,火车晚点,提包带断,什么倒霉事也遇上了,先发个已经整理好的部分,后续仍待整理. 多道程序设计:分离进程为独立的功能 无论在协作进程还是在同一进程的协作子过程层面上,Unix设计风格都运用"做单件事并做好的方法",强调用定义良好的进程间通信或共享文件来连通小型进程,提倡将程序分解为更简单的子进程,并专注考虑这些子进程间的接口,这至少需要通过以下三种方法来实现: 1.降低进程生成的开销(思考下Erlang的process) 2.提供方法(sh

windows文本文件格式?

今天下午想在下windows使用的检索功能查找包含特定字符的文本文件,居然没有找到对应的文件(在这个目录下,一定存在匹配的文件),打开文件,选择一个肯定包含的字符串,查找字符串居然还是没有找到,这才想起来我要检索的文件都是unix的文本文件格式. windows的文本文件格式结尾是0d0a(十六进制),而unix的文件格式是0a,如果是unix的文本文件格式使用记事本打开文件仅仅一行,不会折行.使用vim转换为windows格式后,在检索还是不行,将文件的后缀修改为txt,在检索才能发现文件.

Linux和windows中的换行符差异问题

  Linux和windows中的换行符差异问题 LINUX的换行符在Windows记事本打开不换行或出现黑点是由于Linux和windows中的换行符差异问题造成的. 首先来看回车符号和换行符号产生背景 关于"回车"(carriage return)和"换行"(line feed)这两个概念的来历和区别. 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用

Record Editor 0.85发布 数据文件编辑器

Record Editor 是一款数据文件编辑器,用于CSV(逗号/制表符分隔值)文件.固定字段宽度的文件和XML文件.该程序采用了纪录布局定义来显示可读形式的数据文件.它可以处理PC(文本和二进制),UNIX(文本和二进制),与本地IBM主机(文本和二进制)文件格式.它相似于Net-Cobol's Cobol编辑器或Compuware's http://www.aliyun.com/zixun/aggregation/19352.html">FileAid. Record Editor

《C语言编程初学者指南》一1.7 创建并运行第一个C程序

1.7 创建并运行第一个C程序 gcc编译器是一个ANSI标准编译器.一个C程序要经过很多的步骤,才能变为一个可运行或执行的程序.gcc编译器为你执行了很多的任务,其中最重要的任务包括以下几个: 预处理程序代码,并查找各种指令: 在适当的时候,生成错误代码和消息: 将程序代码编译成目标代码,并将其临时存储在硬盘上: 将任何必需的库链接到目标代码,创建一个可执行文件,并将其存储到硬盘上. 提示 ANSI是American National Standards Institute(美国国家标准研究院

php获得文件大小和文件创建时间的方法_php技巧

本文实例讲述了php获得文件大小和文件创建时间的方法.分享给大家供大家参考.具体分析如下: php中可以显示文件的各种属性,这些属性包括文件的最后访问时间.最后修改时间.文件大小等. <HTML> <HEAD> <TITLE>Returning information about a file</TITLE> </HEAD> <BODY> <?php print "The size of the file is &qu

PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法

 这篇文章主要介绍了PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法,实例分析了php中gmdate函数的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法.分享给大家供大家参考.具体分析如下: 语法如下: ? 1 2 string gmdate (string $Format) string gmdate (string $Format, int $Time) 演示代码