繁体   English   中英

sed命令反向打印文件会跳过最后一行

[英]Sed command to reverse print a file skips last line

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

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

文件nums包含在每一行的数,为1〜25的逻辑此,每个号码首先被复制到holdspace ,而内容holdspace被复制到patspace通过x; 因此,现在holdspace包含当前数字,而patspace包含patspace的数字,其顺序相反。 然后H; 将直到现在为止经过的数字列表追加到holdspace ,以便最新的数字始终保持在最前面。 最后,当到达最后一行时,它最后一次完成,并通过$p打印出来。

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

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

您缺少最后一个x 您将最后一行的内容交换到保留空间中,但是在打印之前,请不要将其拉回。

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

您还会得到一个额外的空白行,因为您确实不想在第一行上执行'H',因为这样可以保留保留空间的初始空白内容。 我会这样做:

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

sed应该执行以下操作:

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

这:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM