[英]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.