如何向后打印文件中的行(不使用“tac”)?

如何向后打印文件中的行(不使用“tac”)?

我想在不使用tac命令的情况下向后打印文件中的行。还有其他解决方案可以用 bash 做这样的事情吗?

答案1

使用sed来模拟tac

sed '1!G;h;$!d' "${inputfile}"

答案2

ed

ed -s infile <<IN
g/^/m0
,p
q
IN

如果你在BSD/ OSX(并且希望很快GNU/linux也作为这将是 POSIX):

tail -r infile

答案3

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file.txt

通过awk 一行行

答案4

正如您要求在 bash 中执行此操作,这里有一个不使用 awk、sed 或 perl 的解决方案,仅使用 bash 函数:

reverse ()
{
    local line
    if IFS= read -r line
    then
        reverse
        printf '%s\n' "$line"
    fi
}

的输出

echo 'a
b
c
d
' | reverse

d
c
b
a

正如预期的那样。

但请注意,行存储在内存中,每个递归调用的函数实例中都有一行。处理大文件时要小心。

相关内容