如何反转文本文件的行?

Gre*_*ill 25 shell command-line reverse filter

我正在编写一个需要反转文本文件行的小shell脚本.是否有标准的过滤器命令来执行此类操作?

我的具体应用是我得到一个Git提交标识符列表,我想以相反的顺序处理它们:

git log --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1 | reverse
Run Code Online (Sandbox Code Playgroud)

我提出的最好的方法就是这样实现reverse:

... | cat -b | sort -rn | cut -f2-
Run Code Online (Sandbox Code Playgroud)

这用于cat对每一行进行编号,然后sort按降序数字顺序(最终反转整个文件)对它们进行排序,然后cut删除不需要的行号.

以上适用于我的应用程序,但在一般情况下可能会失败,因为cat -b只有非空行数.

有没有更好,更通用的方法来做到这一点?

por*_*org 23

有一个标准命令用于您的目的:

tail -r file.txt
Run Code Online (Sandbox Code Playgroud)

以相反的顺序打印file.txt的行!

  • [尾巴的POSIX规范](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/tail.html)没有提到`-r`选项 (5认同)
  • OS X 10.7上的手册页说:"尾部实用程序应该是IEEE Std 1003.2-1992(``POSIX.2'')规范的超集.特别是-F,-b和-r选项是该标准的延伸." (3认同)
  • 我认为 `-r` 选项在 FreeBSD 等 BSD 变体中也可用,但在 gnu tail 中不可用。 (2认同)

Hyn*_*dil 22

答案不是42但是tac.

编辑:使用较慢但耗费更多内存sed

sed 'x;1!H;$!d;x'
Run Code Online (Sandbox Code Playgroud)

甚至更长

perl -e'print reverse<>'
Run Code Online (Sandbox Code Playgroud)

  • 'tac'并不神秘:反过来就是'猫'.;-) (2认同)