输入:
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