按行和字符反转文件

按行和字符反转文件

输入:

hello
enrico

输出:

ocirne
olleh

为此,我可以简单地创建tac一个文件并将输出通过管道传输到rev(或相反),因此完成这项工作的一个函数就是这样:

revtac() { tac "$@" | rev; }

是否有适合该工作的内置功能?

我怀疑这可能会破坏某些东西,因为它会逆转<CR>Windows<LF>生成的文件,但我仍然感兴趣。

答案1

不,没有适合这项工作的内置函数。

顺便说一句,既不是内置函数,tac也不rev是内置函数。它们是外部二进制程序,一些 *nix 系统甚至没有它们。

您还可以使用 Perl 来模拟组合:

perl -lne 'push @lines, scalar reverse; END { print for reverse @lines }' -- file

答案2

您可以根据您的实际需求使用 awk 或 sed 脚本来解决,例如:

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' /path/YOURFILE | sed '1!G;h;$!d'

我是这样测试的:

$ cat /tmp/a
hello
enrico
$ sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' /tmp/a | sed '1!G;h;$!d'
ocirne
olleh
$ 

答案3

或者 awk:

awk '
  function rev(s,   t,i) {
    for (i = length(s); i > 0; i--)
      t = t substr(s, i, 1)
    return t
  }
  { line[NR] = rev($0) }
  END { for (i = NR; i > 0; i--) print line[i] }
' file

相关内容