要实现这个效果(先显示最后一行,最 后显示第一行),你得利用保持空间做一些特别的铺垫工作。

你得像这样使用模式空间:

(1) 在模式空间中放置一行;

(2) 将模式空间中的行放到保持空间中;

(3) 在模式空间中放入下一行;

(4) 将保持空间附加到模式空间后;

(5) 将模式空间中的所有内容都放到保持空间中;

(6)重复执行第(3)~(5)步,直到所有行都反序放到了保持空间中;

(7) 提取并打印行。

在使用这种方法时,你不想在处理时打印行。这意味着要使用sed的-n命令行选项。下一步 是决定如何将保持空间文本附加到模式空间文本后面。这可以用G命令完成。唯一的问题是你不想将保持空间附加到要处理的第一行文本后面。这可以用感叹号命令轻松解决:

1!G

下一步就是将新的模式空间(含有已反转的行)放到保持空间。这也非常简单,只要用h命令就行。

将模式空间中的整个数据流都反转了之后,你要做的就是打印结果。当到达数据流中的最后 一行时,你就知道已经得到了模式空间的整个数据流。打印结果要用下面的命令:

$p

这些都是你创建可以反转行的sed编辑器脚本所需的操作步骤。现在可以运行一下试试:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ cat data2.txt
This is the header line.
This is the first data line.
This is the second data line.
This is the last line.
$
$ sed -n '{1!G ; h ; $p }' data2.txt This is the last line.
This is the second data line.
This is the first data line.
This is the header line.
$