用于反向打印文件的Sed命令会跳过最后一行

时间:2014-05-03 12:21:01

标签: linux sed

我正在尝试使用sed来反转打印文件(我知道它可以通过其他方式完成,例如tac)。这是我到目前为止所得到的:

sed -n -r '/.+/{x;H;$p}' nums

文件nums在每行包含一个数字,从1到25.逻辑是这样,每个数字首先复制到holdspace,而holdspace的内容被复制到patspacex;。所以现在holdspace包含当前数字,而patspace包含到目前为止的数字。然后H;将到目前为止经历的数字列表附加到holdspace,以便最新的numbr始终保持在最前面。最后,当到达最后一行时,它最后一次完成,并通过$p打印出来。

但是,该命令仅以相反的顺序输出数字24到1。第一行应该是25,但不知何故该行被跳过。

有谁能告诉我这段代码有什么问题?

2 个答案:

答案 0 :(得分:2)

您最后错过了一次x。您将最后一行的内容交换到保留空间,但在打印之前永远不会将其拉出来。

sed -n -r -e '/.+/{x;H}' -e '${x;p}'

你还得到一个额外的空白行,因为你真的不想做' H'在第一行,因为它保留了保留空间的初始空白内容。我会这样做:

sed -n -r -e '/.+/x' -e '2,$H' -e '${x;p}' nums

答案 1 :(得分:1)

sed应该:

sed '1!G;h;$!d' file

这个:

sed -n '1!G;h;$p' file