我正在编写一个需要反转文本文件行的小shell脚本.是否有标准的过滤器命令来执行此类操作?
我的具体应用是我得到一个Git提交标识符列表,我想以相反的顺序处理它们:
git log --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1 | reverse
我提出的最好的方法就是这样实现reverse
:
... | cat -b | sort -rn | cut -f2-
这用于cat
对每一行进行编号,然后sort
按降序数字顺序(最终反转整个文件)对它们进行排序,然后cut
删除不需要的行号.
以上适用于我的应用程序,但在一般情况下可能会失败,因为cat -b
只有非空行数.
有没有更好,更通用的方法来做到这一点?
在GNU coreutils中,有tac(1)
有一个标准命令用于您的目的:
tail -r file.txt
以相反的顺序打印file.txt的行!
答案不是42但是tac
.
编辑:使用较慢但耗费更多内存sed
sed 'x;1!H;$!d;x'
甚至更长
perl -e'print reverse<>'