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