5.6. 测试和保存输出

未匹配的标注

5.6 测试和保存输出

在前面对模式空间的讨论中,你看到了 sed:

  1. 对输入行做一个拷贝。

  2. 在模式空间中修改那个拷贝。

  3. 将拷贝输出到标准输出。

这意味着 sed 有一个内置的防护机制,以至于你不能对原文件进行修改。因此,下面的命令行:

$ sed -f sedscr testfile

不会在 testfile 中进行修改。它将所有行(被修改的行和不变的行)一起输出到标准输出(通常是屏幕)。如果你想保存它,你必须用一个新文件来捕捉这个输出。

$ sed -f sedscr testfile > newfile

重定向符 ">" 将输出从 sed 引导到文件 newfile。不要从命令行将输出重定向回输入文件,否则你将覆盖这个输入文件。这甚至将在 sed 有机会处理文件之前发生,实际上会损坏你的数据。把输出重定向到一个文件的重要原因是检验你的结果,你可以检验 newfile 的内容,然后将它和 testfile 进行比较。如果你想非常系统化的检查你的结果(并且你应该这么做),使用 diff 程序来查看这两个文件之间的不同。

$ diff testfile newfile

这个命令将这样显示这些行:只在 testfile 中出现的行前置 "<"。只在 newfile 中出现的行前置 ">"。当你已经查验证完你的结果,对原来的输入文件做一个备份拷贝后就使用 mv 命令来用新版本的文件覆盖原来的文件。在丢弃原始版本之前,必须要确认编辑脚本正常工作。

因为这些步骤是如此频繁地重复,你会发现将它们放到一个 shell 脚本中是有用的。然而我们不会深入研究效脚本的工作原理,要理解并使用这些脚本是相当容易的。写一个 shell 脚本,包括使用一个文本编辑器键入一个或多个 命令行在一个文件中,保存这个文件,然后使用 chmod 命令使得这个文件可被执行。文件名就是这个命令的名称,然后就能够在系统提示符那里键入。如果你不熟悉需要脚本,就请把书中出现的 shell 脚本作为模仿的例子。在里面你可以进行自己的替换。

下面这两个 shell 脚本,对于测试 sed 脚本和在一个文件中进行永久性的变化是有用的。当同样的脚本需要被运行到多个文件上时,它们特别有用。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~