当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 2001 年 10 月 在这篇 sed 系列的总结性文章中,Daniel Robbins 带您体验 sed 的真正力量。
 

 

    摘要:2001 年 10 月 在本文章系列中,daniel robbins 将为您演示如何使用功能十分强大(但常被遗忘)的 unix 流编辑器 sed。sed 是用批处理方式编辑文件或以十分有效的方式创建 shell 脚本以修改现有文件的理想工具。挑选编辑器在 unix 世界中有很多文本编辑器可供我们选择。思考一下 -- vi、emacs 和 jed 以及很多其它工具都会浮现在脑海中。我们都有自己已逐渐......
 ·bash 实例,第 3 部分    »显示摘要«
    摘要:探讨 ebuild 系统daniel robbins总裁兼 ceo, gentoo technologies, inc.2000 年 5 月 daniel robbins 在其最后一篇 bash实例文章中详细讲述了 gentoo linux ebuild 系统,这个展示 bash能力的极佳范例。循序渐进地,他为您展示如何实现 ebuild系统,并触及很多方便的 bash技术和设计策略。在本文末尾,......


通用线程 -- sed 实例,第 3 部分
2001 年 10 月 在这篇 sed 系列的总结性文章中,daniel robbins 带您体验 sed 的真正力量.在介绍完几个重要的 sed 脚本之后,他将通过将一个 quicken .qif 文件转换成可读文本格式来演示一些基本 sed 脚本的编写.该转换脚本不仅实用,而且还是展现 sed 脚本编写能力的极佳示例.

强健的 sed

在 第二篇 sed 文章中,我提供了一些示例来演示 sed 的工作原理,但是它们当中很少有示例能实际做特别 有用的事.在这篇 sed 系列的最后文章中,我要改变那种方式,并使用 sed 来做实际的事.我将为您显示几个示例,它们不仅演示 sed 的能力,而且还做一些真正巧妙(与方便)的事.例如,在本文的后半部,将为您演示如何设计一个 sed 脚本来将 .qif 文件从 intuit 的 quicken 金融程序转换成具有良好格式的文本文件.在那样做之前,我们将看一下不怎么复杂但却很有用的 sed 脚本. 【程序编程相关:iptables 中文手册

【推荐阅读:学习嵌入式Linux的笔记和体会

【扩展信息:清除CISCO路由器密码

文本转换

第一个实际脚本将 unix 风格的文本转换成 dos/windows 格式.您可能知道,基于 dos/windows 的文本文件在每一行末尾有一个 cr(回车)与 lf(换行),而 unix 文本只有一个换行.有时可能需要将某些 unix 文本移至 windows 系统,该脚本将为您执行必需的格式转换.

$ sed -e s/$/\r/ myunix.txt > mydos.txt

在该脚本中,$ 规则表达式将与行的末尾匹配,而 \r 告诉 sed 在其之前插入一个回车.在换行之前插入回车,立即,每一行就以 cr/lf 结束.请注意,仅当使用 gnu sed 3.02.80 或以后的版本时,才会用 cr 替换 \r.如果还没有安装 gnu sed 3.02.80,请在我的 第一篇 sed 文章中查看如何这样做的说明.

我已记不清有多少次在下载一些示例脚本或 c 代码之后,却发现它是 dos/windows 格式.虽然很多程序不在乎 dos/windows 格式的 cr/lf 文本文件,但是有几个程序却在乎 -- 最著名的是 bash,只要一遇到回车,它就会出问题.以下 sed 调用将把 dos/windows 格式的文本转换成可信赖的 unix 格式:

$ sed -e s/.$// mydos.txt > myunix.txt

该脚本的工作原理很简单:替代规则表达式与一行的最末字符匹配,而该字符恰好就是回车.我们用空字符替换它,从而将其从输出中彻底删除.如果使用该脚本并注意到已经删除了输出中每行的最末字符,那么,您就指定了已经是 unix 格式的文本文件.也就没必要那样做了!

反转行

下面是另一个方便的小脚本.与大多数 linux 发行版中包括的 "tac" 命令一样,该脚本将反转文件中行的次序."tac" 这个名称可能会给人以误导,因为 "tac" 不反转行中字符的位置(左与右),而是反转文件中行的位置(上与下).用 "tac" 处理以下文件:

foo bar oni

....将产生以下输出:

oni bar foo

可以用以下 sed 脚本达到相同目的:


...   下一页
 ·创建能够超时的socket连结api    »显示摘要«
    摘要:在socket编程中调用connect函数连接一远程机器,如果该ip不存在的话,connect将在一段时间内返回-1表示失败。问题是有时候我们需要准确控制connect函数连接的时间,这就需要我们能够控制这个connect函数。但是,gcc给我们提供的api没有这个功能。我自己设计了一个这样的api函数--connect2,它能够在用户设置的一段时间后,连接超时退出。 这个connect2的初步设......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE