Content #
要实现这种效果(先显示最后一行,最后显示第一行),需要利用保留空间做一些特别的铺垫工作。为此,可以使用sed做以下工作。
(1) 在模式空间中放置一行文本。
(2) 将模式空间中的文本行复制到保留空间。
(3) 在模式空间中放置下一行文本。
(4) 将保留空间的内容附加到模式空间。
(5) 将模式空间中的所有内容复制到保留空间。
(6) 重复执行第(3)~(5)步,直到将所有文本行以反序放入保留空间。
(7) 提取并打印文本行。

在使用这种方法时,你不想在处理行的时候打印。这意味着要使用sed的-n选项。然后要决定如何将保留空间的文本附加到模式空间的文本之后。这可以用G命令完成。唯一的问题是你不想将保留空间的文本附加到要处理的第一行文本之后。这可以用感叹号命令轻松搞定:
1!G
接下来就是将新的模式空间(包含已反转的文本行)放入保留空间。这也不难,用h命令即可。将模式空间中的所有文本行都反转之后,只需打印结果。当到达数据流中的最后一行时,你就得到了模式空间的所有内容。要打印结果,可以使用如下命令:
$p
以上是创建可以反转文本行的sed编辑器脚本所需的操作步骤。现在可以运行一下试试: $ cat data2.txt Header Line First Data Line Second Data Line End of Data Lines $ $ sed -n ‘{1!G ; h ; $p }’ data2.txt End of Data Lines Second Data Line First Data Line Header Line $ sed编辑器脚本和预期一样,输出了反转后的文本文件。这体现了保留空间的强大之处。它提供了一种在脚本输出中控制行顺序的简单方法。
注意: 有一个现成的bash shell命令可以实现同样的效果:tac命令会以倒序显示文本文件。你大概也注意到了,这个命令的名字很巧妙,因为它的功能正好和 cat命令相反,所以也采用了相反的命令。
From #
Linux命令行与shell脚本编程大全